From ebee393b32e2e25604614f07997f62c9e9726dcb Mon Sep 17 00:00:00 2001 From: Chris Chudzicki Date: Wed, 16 Oct 2024 10:20:03 -0400 Subject: [PATCH 1/9] configure sentry, fix error pages --- frontends/main/.gitignore | 3 + frontends/main/next.config.js | 40 +- frontends/main/package.json | 1 + frontends/main/sentry.client.config.ts | 30 + frontends/main/sentry.edge.config.ts | 18 + frontends/main/sentry.server.config.ts | 17 + .../app-pages/ErrorPage/ErrorPageTemplate.tsx | 4 - ...balErrorPage.tsx => FallbackErrorPage.tsx} | 6 +- frontends/main/src/app/error.tsx | 22 + frontends/main/src/app/global-error.tsx | 37 +- .../main/src/app/sentry-example-page/page.tsx | 88 ++ .../ErrorBoundary/ErrorBoundary.tsx | 8 +- frontends/main/src/instrumentation.ts | 14 + yarn.lock | 1167 ++++++++++++++++- 14 files changed, 1414 insertions(+), 41 deletions(-) create mode 100644 frontends/main/sentry.client.config.ts create mode 100644 frontends/main/sentry.edge.config.ts create mode 100644 frontends/main/sentry.server.config.ts rename frontends/main/src/app-pages/ErrorPage/{GlobalErrorPage.tsx => FallbackErrorPage.tsx} (75%) create mode 100644 frontends/main/src/app/error.tsx create mode 100644 frontends/main/src/app/sentry-example-page/page.tsx create mode 100644 frontends/main/src/instrumentation.ts diff --git a/frontends/main/.gitignore b/frontends/main/.gitignore index fd3dbb571a..1dd45b2022 100644 --- a/frontends/main/.gitignore +++ b/frontends/main/.gitignore @@ -34,3 +34,6 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts + +# Sentry Config File +.env.sentry-build-plugin diff --git a/frontends/main/next.config.js b/frontends/main/next.config.js index 62a8549aa3..c72cd3c672 100644 --- a/frontends/main/next.config.js +++ b/frontends/main/next.config.js @@ -21,6 +21,7 @@ const processFeatureFlags = () => { /** @type {import('next').NextConfig} */ const nextConfig = { + productionBrowserSourceMaps: true, async rewrites() { return [ /* Images moved from /static, though image paths are sometimes @@ -99,4 +100,41 @@ const nextConfig = { }, } -module.exports = nextConfig +// Injected content via Sentry wizard below + +const { withSentryConfig } = require("@sentry/nextjs") + +module.exports = withSentryConfig(nextConfig, { + // For all available options, see: + // https://github.com/getsentry/sentry-webpack-plugin#options + + org: "mit-office-of-digital-learning", + project: "open-next", + + // Only print logs for uploading source maps in CI + silent: !process.env.CI, + + // For all available options, see: + // https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/ + + // Upload a larger set of source maps for prettier stack traces (increases build time) + widenClientFileUpload: true, + + // Uncomment to route browser requests to Sentry through a Next.js rewrite to circumvent ad-blockers. + // This can increase your server load as well as your hosting bill. + // Note: Check that the configured route will not match with your Next.js middleware, otherwise reporting of client- + // side errors will fail. + // tunnelRoute: "/monitoring", + + // Hides source maps from generated client bundles + hideSourceMaps: true, + + // Automatically tree-shake Sentry logger statements to reduce bundle size + disableLogger: true, + + // Enables automatic instrumentation of Vercel Cron Monitors. (Does not yet work with App Router route handlers.) + // See the following for more information: + // https://docs.sentry.io/product/crons/ + // https://vercel.com/docs/cron-jobs + automaticVercelMonitors: true, +}) diff --git a/frontends/main/package.json b/frontends/main/package.json index bf9db484e3..0baa05c26e 100644 --- a/frontends/main/package.json +++ b/frontends/main/package.json @@ -14,6 +14,7 @@ "@emotion/cache": "^11.13.1", "@mitodl/course-search-utils": "3.2.4", "@remixicon/react": "^4.2.0", + "@sentry/nextjs": "^8", "@tanstack/react-query": "^4.36.1", "api": "workspace:*", "formik": "^2.4.6", diff --git a/frontends/main/sentry.client.config.ts b/frontends/main/sentry.client.config.ts new file mode 100644 index 0000000000..854c772137 --- /dev/null +++ b/frontends/main/sentry.client.config.ts @@ -0,0 +1,30 @@ +// Added by @sentry/wizard +// This file configures the initialization of Sentry on the client. +// The config you add here will be used whenever a users loads a page in their browser. +// https://docs.sentry.io/platforms/javascript/guides/nextjs/ + +import * as Sentry from "@sentry/nextjs" + +Sentry.init({ + dsn: process.env.NEXT_PUBLIC_SENTRY_DSN, + release: process.env.NEXT_PUBLIC_VERSION, + environment: process.env.NEXT_PUBLIC_SENTRY_ENV, + profilesSampleRate: Number( + process.env.NEXT_PUBLIC_SENTRY_PROFILES_SAMPLE_RATE, + ), + tracesSampleRate: Number(process.env.NEXT_PUBLIC_SENTRY_TRACES_SAMPLE_RATE), + tracePropagationTargets: process.env.NEXT_PUBLIC_MITOL_API_BASE_URL + ? [process.env.NEXT_PUBLIC_MITOL_API_BASE_URL] + : [], + // Add optional integrations for additional features + integrations: [ + Sentry.replayIntegration(), + Sentry.browserTracingIntegration(), + Sentry.browserProfilingIntegration(), + ], + + // Define how likely Replay events are sampled. + // This sets the sample rate to be 10%. You may want this to be 100% while + // in development and sample at a lower rate in production + replaysSessionSampleRate: 0.1, +}) diff --git a/frontends/main/sentry.edge.config.ts b/frontends/main/sentry.edge.config.ts new file mode 100644 index 0000000000..72510830d2 --- /dev/null +++ b/frontends/main/sentry.edge.config.ts @@ -0,0 +1,18 @@ +// Added by @sentry/wizard +// This file configures the initialization of Sentry for edge features (middleware, edge routes, and so on). +// The config you add here will be used whenever one of the edge features is loaded. +// Note that this config is unrelated to the Vercel Edge Runtime and is also required when running locally. +// https://docs.sentry.io/platforms/javascript/guides/nextjs/ + +import * as Sentry from "@sentry/nextjs" + +Sentry.init({ + dsn: process.env.NEXT_PUBLIC_SENTRY_DSN, + release: process.env.NEXT_PUBLIC_VERSION, + environment: process.env.NEXT_PUBLIC_SENTRY_ENV, + // Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control. + tracesSampleRate: 1, + + // Setting this option to true will print useful information to the console while you're setting up Sentry. + debug: false, +}) diff --git a/frontends/main/sentry.server.config.ts b/frontends/main/sentry.server.config.ts new file mode 100644 index 0000000000..a7c03a3866 --- /dev/null +++ b/frontends/main/sentry.server.config.ts @@ -0,0 +1,17 @@ +// Added by @sentry/wizard +// This file configures the initialization of Sentry on the server. +// The config you add here will be used whenever the server handles a request. +// https://docs.sentry.io/platforms/javascript/guides/nextjs/ + +import * as Sentry from "@sentry/nextjs" + +Sentry.init({ + dsn: process.env.NEXT_PUBLIC_SENTRY_DSN, + release: process.env.NEXT_PUBLIC_VERSION, + environment: process.env.NEXT_PUBLIC_SENTRY_ENV, + // Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control. + tracesSampleRate: 1, + + // Setting this option to true will print useful information to the console while you're setting up Sentry. + debug: false, +}) diff --git a/frontends/main/src/app-pages/ErrorPage/ErrorPageTemplate.tsx b/frontends/main/src/app-pages/ErrorPage/ErrorPageTemplate.tsx index 54a567d86e..bcea4ee62e 100644 --- a/frontends/main/src/app-pages/ErrorPage/ErrorPageTemplate.tsx +++ b/frontends/main/src/app-pages/ErrorPage/ErrorPageTemplate.tsx @@ -17,10 +17,6 @@ const ErrorPageTemplate: React.FC = ({ children }) => { return ( - {/* TODO - {`${title} | ${APP_SETTINGS.SITE_NAME}`} - - */} {children} diff --git a/frontends/main/src/app-pages/ErrorPage/GlobalErrorPage.tsx b/frontends/main/src/app-pages/ErrorPage/FallbackErrorPage.tsx similarity index 75% rename from frontends/main/src/app-pages/ErrorPage/GlobalErrorPage.tsx rename to frontends/main/src/app-pages/ErrorPage/FallbackErrorPage.tsx index 19c8f77f76..3a2875db11 100644 --- a/frontends/main/src/app-pages/ErrorPage/GlobalErrorPage.tsx +++ b/frontends/main/src/app-pages/ErrorPage/FallbackErrorPage.tsx @@ -4,11 +4,15 @@ import React from "react" import ErrorPageTemplate from "./ErrorPageTemplate" import { Typography } from "ol-components" +// Double check type Error below +// Sentry wizard thinks it should be +// import Error from "next/error"; + const GlobalErrorPage = ({ error }: { error: Pick }) => { return ( - Unexpected Error + Something went wrong. {error.message || ""} diff --git a/frontends/main/src/app/error.tsx b/frontends/main/src/app/error.tsx new file mode 100644 index 0000000000..fc2151b2ff --- /dev/null +++ b/frontends/main/src/app/error.tsx @@ -0,0 +1,22 @@ +"use client" +/* + * Fallback error UI for errors within page content. + * + * Notes: + * - DOES use root layout + * + * See for more: + * https://nextjs.org/docs/app/building-your-application/routing/error-handling#handling-errors-in-root-layouts + */ + +import React, { useEffect } from "react" +import * as Sentry from "@sentry/nextjs" +import FallbackErrorPage from "@/app-pages/ErrorPage/FallbackErrorPage" +const Error = ({ error }: { error: Error }) => { + useEffect(() => { + Sentry.captureException(error) + }, [error]) + return +} + +export default Error diff --git a/frontends/main/src/app/global-error.tsx b/frontends/main/src/app/global-error.tsx index 43d2266c5c..89fe497bf6 100644 --- a/frontends/main/src/app/global-error.tsx +++ b/frontends/main/src/app/global-error.tsx @@ -1,19 +1,34 @@ "use client" -/* This is the catch-all error page that receives errors from server rendered root layout - * components and metadata. - * It is only enabled in production so that in development we see the Next.js error overlay. - * It is passed an error object as an argument, though this has been stripped of everything except - * the message and a digest for server logs correlation; to prevent leaking anything to the client +/* + * Fallback error UI for errors within root layout. + * (error.tsx is the fallback error page for UI within page content.) + * + * Notes: + * - does NOT use root layout (since error occured there!) + * - therefore, must definie its own HTML tags and providers + * Must define its own HTML tag + * - NOT used in development mode * * https://nextjs.org/docs/app/building-your-application/routing/error-handling#handling-errors-in-root-layouts */ +import React, { useEffect } from "react" +import * as Sentry from "@sentry/nextjs" +import FallbackErrorPage from "@/app-pages/ErrorPage/FallbackErrorPage" +import { ThemeProvider } from "ol-components" -import React from "react" -import GlobalErrorPage from "@/app-pages/ErrorPage/GlobalErrorPage" +export default function GlobalError({ error }: { error: Error }) { + useEffect(() => { + Sentry.captureException(error) + }, [error]) -const GlobalError = ({ error }: { error: Error }) => { - return + return ( + + + + + + + + ) } - -export default GlobalError diff --git a/frontends/main/src/app/sentry-example-page/page.tsx b/frontends/main/src/app/sentry-example-page/page.tsx new file mode 100644 index 0000000000..600257c3e5 --- /dev/null +++ b/frontends/main/src/app/sentry-example-page/page.tsx @@ -0,0 +1,88 @@ +"use client" +import React from "react" + +export default function Page() { + const [_hasError, setHasError] = React.useState(true) + + return ( +
+

+ + + +

+ +

Get started by sending us a sample error:

+ + +

+ Next, look for the error on the{" "} + + Issues Page + + . +

+

+ For more information, see{" "} + + https://docs.sentry.io/platforms/javascript/guides/nextjs/ + +

+
+ ) +} diff --git a/frontends/main/src/components/ErrorBoundary/ErrorBoundary.tsx b/frontends/main/src/components/ErrorBoundary/ErrorBoundary.tsx index 14030e669e..73143c4e5f 100644 --- a/frontends/main/src/components/ErrorBoundary/ErrorBoundary.tsx +++ b/frontends/main/src/components/ErrorBoundary/ErrorBoundary.tsx @@ -56,9 +56,13 @@ class ErrorBoundaryHandler extends Component< } render() { - if (this.state.hasError && isForbiddenError(this.state.error)) { - return + if (this.state.hasError) { + if (isForbiddenError(this.state.error)) { + return + } + throw this.state.error } + return this.props.children } } diff --git a/frontends/main/src/instrumentation.ts b/frontends/main/src/instrumentation.ts new file mode 100644 index 0000000000..2fc339dbf4 --- /dev/null +++ b/frontends/main/src/instrumentation.ts @@ -0,0 +1,14 @@ +// Added by @sentry/wizard +import * as Sentry from "@sentry/nextjs" + +export async function register() { + if (process.env.NEXT_RUNTIME === "nodejs") { + await import("../sentry.server.config") + } + + if (process.env.NEXT_RUNTIME === "edge") { + await import("../sentry.edge.config") + } +} + +export const onRequestError = Sentry.captureRequestError diff --git a/yarn.lock b/yarn.lock index 59eafe4da4..1cdf911c4a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -39,7 +39,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.9, @babel/core@npm:^7.23.9, @babel/core@npm:^7.24.4": +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.5, @babel/core@npm:^7.18.9, @babel/core@npm:^7.23.9, @babel/core@npm:^7.24.4": version: 7.25.8 resolution: "@babel/core@npm:7.25.8" dependencies: @@ -3478,7 +3478,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15, @jridgewell/sourcemap-codec@npm:^1.5.0": version: 1.5.0 resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" checksum: 10/4ed6123217569a1484419ac53f6ea0d9f3b57e5b57ab30d7c267bdb27792a27eb0e4b08e84a2680aa55cc2f2b411ffd6ec3db01c44fdc6dc43aca4b55f8374fd @@ -4022,6 +4022,423 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/api-logs@npm:0.52.1": + version: 0.52.1 + resolution: "@opentelemetry/api-logs@npm:0.52.1" + dependencies: + "@opentelemetry/api": "npm:^1.0.0" + checksum: 10/7515667a41a38014ffda70674c0b77c9c68417cde9f8ce8840e675308b4431f99d879e8d347f1b08486561617f914c07ee704ad6ed8a6522dabc3a81ac39dc88 + languageName: node + linkType: hard + +"@opentelemetry/api-logs@npm:0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/api-logs@npm:0.53.0" + dependencies: + "@opentelemetry/api": "npm:^1.0.0" + checksum: 10/347b4554d6ee01afb29bd39e8f9cbbccd80abb0883fe6a84e3bcce8ab4dbfe357a2729246d2f66de0de6272846fd1bb2d71e286e18ad2690d9e7f46f02f00f73 + languageName: node + linkType: hard + +"@opentelemetry/api@npm:^1.0.0, @opentelemetry/api@npm:^1.8, @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:^1.25.1": + version: 1.26.0 + resolution: "@opentelemetry/context-async-hooks@npm:1.26.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/c8824cc00385f21ecdf5b48ac474096687f9ce2e8d34612a62ee8bc7a6e25797c787239349a12bfeefbff200dcb7379ca45355a5684b9755dcf8fbd3b69cf523 + languageName: node + linkType: hard + +"@opentelemetry/core@npm:1.26.0, @opentelemetry/core@npm:^1.1.0, @opentelemetry/core@npm:^1.25.1, @opentelemetry/core@npm:^1.8.0": + version: 1.26.0 + resolution: "@opentelemetry/core@npm:1.26.0" + dependencies: + "@opentelemetry/semantic-conventions": "npm:1.27.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/474b6bcf42cd2825d56f915eb0d6e6cdcb37777a11fc2618fc2fa50754f4b9b5df23944f3aab186cb3ab930db5c3a81efa3183362802314a966930110346e6a4 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-amqplib@npm:^0.42.0": + version: 0.42.0 + resolution: "@opentelemetry/instrumentation-amqplib@npm:0.42.0" + dependencies: + "@opentelemetry/core": "npm:^1.8.0" + "@opentelemetry/instrumentation": "npm:^0.53.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/c97a5738792095faec20847e3bb1cb229269af2b445331ca922468b80bc2da65a3107dfe0e2e706ab7fb5c25fc260c5d5ffccda1c332cebae7d464155e6bf20d + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-connect@npm:0.39.0": + version: 0.39.0 + resolution: "@opentelemetry/instrumentation-connect@npm:0.39.0" + dependencies: + "@opentelemetry/core": "npm:^1.8.0" + "@opentelemetry/instrumentation": "npm:^0.53.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + "@types/connect": "npm:3.4.36" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/76c62eead2d07673bdd0bf9e87302abf5b74f7a9c300d76e06743a94d591823fbd90b81abc92fb6321beb0aa707f175c501dd091f80f91d0e6d2ba86ef939618 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-dataloader@npm:0.12.0": + version: 0.12.0 + resolution: "@opentelemetry/instrumentation-dataloader@npm:0.12.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.53.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/d560b519a6be6572a3bd3707f2035f4e1f8e50b95eee109ee138b9ebfadd1ec7bca288aeabb54e8299746eae9457001162dac6ccd92af5ba7449301e0bb139bd + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-express@npm:0.42.0": + version: 0.42.0 + resolution: "@opentelemetry/instrumentation-express@npm:0.42.0" + dependencies: + "@opentelemetry/core": "npm:^1.8.0" + "@opentelemetry/instrumentation": "npm:^0.53.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/60dfa0491f6ef553c20eb598e672ea7eb9b454a60cb595aab0aae36d763c96284224518ee98008500f87d669dbac55d0da700cdd03d6764e79d6ec59f869551b + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-fastify@npm:0.39.0": + version: 0.39.0 + resolution: "@opentelemetry/instrumentation-fastify@npm:0.39.0" + dependencies: + "@opentelemetry/core": "npm:^1.8.0" + "@opentelemetry/instrumentation": "npm:^0.53.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/125dd788e855fa879a801cd6cbc1162d0caa3290ab1205b488e0d05972d16b1e1fc2b1976357fc50afd0bac014b7e70861e0c3fa6ec3eea8407284722a656f58 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-fs@npm:0.15.0": + version: 0.15.0 + resolution: "@opentelemetry/instrumentation-fs@npm:0.15.0" + dependencies: + "@opentelemetry/core": "npm:^1.8.0" + "@opentelemetry/instrumentation": "npm:^0.53.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/06869fd101d40bb350ea20f39e535e5dcfd134dc4d5b330f2b4ae517f05c027f3ee02b9681937736ed9558974ccec1d89eee0707f80a3ecc8a6c8503f2f9d692 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-generic-pool@npm:0.39.0": + version: 0.39.0 + resolution: "@opentelemetry/instrumentation-generic-pool@npm:0.39.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.53.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/37b476cdddaf3fa2f83a340dcd6949e70cbead45cf747a953099fdb422cb0e89fd52017d0ca01e74283e5af4caa788eb4d163f81e4f21e6ba8e89d0a0dbc99c5 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-graphql@npm:0.43.0": + version: 0.43.0 + resolution: "@opentelemetry/instrumentation-graphql@npm:0.43.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.53.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/2d1e5a46b4174c8d9acfa9ed93cf06f1aafcc74048f3553219deb42a9c8aa5d87b1e67b0e44c7be6e7954005e63233958bf9af306702c8709f5ab6e2f0c7bbb0 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-hapi@npm:0.41.0": + version: 0.41.0 + resolution: "@opentelemetry/instrumentation-hapi@npm:0.41.0" + dependencies: + "@opentelemetry/core": "npm:^1.8.0" + "@opentelemetry/instrumentation": "npm:^0.53.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/5025db3e785476757947915e9512d454f565eabc883757d7a122e134f3cb2e5d418142f916e5ab4b2db2bfb9c59ab105f602c19af268442ae07106b5b547fa64 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-http@npm:0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/instrumentation-http@npm:0.53.0" + dependencies: + "@opentelemetry/core": "npm:1.26.0" + "@opentelemetry/instrumentation": "npm:0.53.0" + "@opentelemetry/semantic-conventions": "npm:1.27.0" + semver: "npm:^7.5.2" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/c00e71f7a5a03723bf13e55e74dcc8e44d61b87fc38c50821fa6bf86a09d3eca68a62a4ccc6f35e70a6529c36d134eca77889852869d7a5a9b2af73f3fb5f097 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-ioredis@npm:0.43.0": + version: 0.43.0 + resolution: "@opentelemetry/instrumentation-ioredis@npm:0.43.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.53.0" + "@opentelemetry/redis-common": "npm:^0.36.2" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/fa405f521134a375c3ae1894d39da2a62bd021695fbc6a28d7efe61202d9a3b895047cf59353d6773e5d8528aea24a63841110ba48800132f5aac47615603c10 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-kafkajs@npm:0.3.0": + version: 0.3.0 + resolution: "@opentelemetry/instrumentation-kafkajs@npm:0.3.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.53.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/871107d47836ee5bff9bb4719d2c84dd46e1b2eecce3a4cf71b2735a1c53bd8d5f2c1ff66e5add8aa59e7da53ab26c74c766dac54bfd19cbe252bb038385bc56 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-koa@npm:0.43.0": + version: 0.43.0 + resolution: "@opentelemetry/instrumentation-koa@npm:0.43.0" + dependencies: + "@opentelemetry/core": "npm:^1.8.0" + "@opentelemetry/instrumentation": "npm:^0.53.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/b494196962c0840651e5fdec7350a8d9f443ee9e682e4c20c8b47ed82c6c34875adc7fd467ac04c3838edbf14bf79aafddb889f2755fc1957f27275a08442e83 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-lru-memoizer@npm:0.40.0": + version: 0.40.0 + resolution: "@opentelemetry/instrumentation-lru-memoizer@npm:0.40.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.53.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/07bb795faedb0c01bf7dd2cc660431b2303fd1f3a904b3fcc06eb601fde94653f8391a40ccf101a391893187a68381ab6ea8a284118fff328d32b130fac2ea6c + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mongodb@npm:0.47.0": + version: 0.47.0 + resolution: "@opentelemetry/instrumentation-mongodb@npm:0.47.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.53.0" + "@opentelemetry/sdk-metrics": "npm:^1.9.1" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/570379bf6873dac9535d7b710e0c3d7228e132b7e290dfa0d244e22d4b11652500938685412c1d1ba9b34c958eaf96509af009adb07e258d5ea9347112765c72 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mongoose@npm:0.42.0": + version: 0.42.0 + resolution: "@opentelemetry/instrumentation-mongoose@npm:0.42.0" + dependencies: + "@opentelemetry/core": "npm:^1.8.0" + "@opentelemetry/instrumentation": "npm:^0.53.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/58c3ba89ce43830451dcc105a2ebf352b296cf6b1b8f6194ac69c1fa39c18e50ee0092f8e514a27046cf35e0ade391425f7adf0e6e6b1fd8dbbec2b01f393be2 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mysql2@npm:0.41.0": + version: 0.41.0 + resolution: "@opentelemetry/instrumentation-mysql2@npm:0.41.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.53.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + "@opentelemetry/sql-common": "npm:^0.40.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/40f48b3f87bda347db2332020f0880223f49a894e0312d03e1f86aa48b8335b6db65955ea775b8bec2a687672bdbd9c0997294acdd4cf51765da0e22e1d98a35 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mysql@npm:0.41.0": + version: 0.41.0 + resolution: "@opentelemetry/instrumentation-mysql@npm:0.41.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.53.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + "@types/mysql": "npm:2.15.26" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/20ff56edc0b74cf8be2dd5960e210a6c20568169af5768fd78bb33f5a626e271fe2ac6cf7ad0e9629ff932a18feac04db99fffa3c867b27c679523dd2f4570d3 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-nestjs-core@npm:0.40.0": + version: 0.40.0 + resolution: "@opentelemetry/instrumentation-nestjs-core@npm:0.40.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.53.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/421f3e18c651b74383d5cd6a231431ecda3e49262f934dca27bf2272fe58334cbe2acf2f62ce5d82c0893d6f899e2921dfc6a6f78ab27f84a35bd8bfb77df9e4 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-pg@npm:0.44.0": + version: 0.44.0 + resolution: "@opentelemetry/instrumentation-pg@npm:0.44.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.53.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + "@opentelemetry/sql-common": "npm:^0.40.1" + "@types/pg": "npm:8.6.1" + "@types/pg-pool": "npm:2.0.6" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/d902682a3630ff1ef392624165b46a2b4fe0fd696f42a588030f2c4ba73ccd2631792cf6b122bad0dfddb929044b96c285f63517704e7ccaf699a77150f5f3d9 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-redis-4@npm:0.42.0": + version: 0.42.0 + resolution: "@opentelemetry/instrumentation-redis-4@npm:0.42.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.53.0" + "@opentelemetry/redis-common": "npm:^0.36.2" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/d5ff240b826525cdc9935ab2885f65ea5c5d77ad31e9ee8142e6840b1c1603db025370b67fb828580a242fe7ff815d1335ff3845c48d8b94070f3683f71b0898 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-undici@npm:0.6.0": + version: 0.6.0 + resolution: "@opentelemetry/instrumentation-undici@npm:0.6.0" + dependencies: + "@opentelemetry/core": "npm:^1.8.0" + "@opentelemetry/instrumentation": "npm:^0.53.0" + peerDependencies: + "@opentelemetry/api": ^1.7.0 + checksum: 10/97291ecca9ff936dc4a418b380542f4dbb1f891692df44292dd61dc9e39aa1c347b70666cda5c30fbd78969d3b6ea602a6bafb30566b65eec0e00bcac459b2c4 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation@npm:0.53.0, @opentelemetry/instrumentation@npm:^0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/instrumentation@npm:0.53.0" + dependencies: + "@opentelemetry/api-logs": "npm:0.53.0" + "@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/4b994c8568a503a15655cba249b1dbdef3f67dfda37938abba6267ba75b6d72a9aa276be4b0c8874e86f98ab89d92877e1874e0565a7e67f062c43dfcbbb16a5 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation@npm:^0.49 || ^0.50 || ^0.51 || ^0.52.0": + version: 0.52.1 + resolution: "@opentelemetry/instrumentation@npm:0.52.1" + dependencies: + "@opentelemetry/api-logs": "npm:0.52.1" + "@types/shimmer": "npm:^1.0.2" + 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/87761bd593f2b905d88d0531a3a2a7f4b0186334ae413b4c172a86bd4de0fd6d2f906a1bfd9dd7bd172a228a44fa7a680f5802a1570dfe2fadad0768e80bd7a8 + languageName: node + linkType: hard + +"@opentelemetry/redis-common@npm:^0.36.2": + version: 0.36.2 + resolution: "@opentelemetry/redis-common@npm:0.36.2" + checksum: 10/e7f610f79c95bab9156a9831162c7b55b94ab43c5e47ecb9efcc10c08a236395fdd54b6bb018da981e6641bac9da6fda1b50636fb49db584e87d988750d255e1 + languageName: node + linkType: hard + +"@opentelemetry/resources@npm:1.26.0, @opentelemetry/resources@npm:^1.26.0": + version: 1.26.0 + resolution: "@opentelemetry/resources@npm:1.26.0" + dependencies: + "@opentelemetry/core": "npm:1.26.0" + "@opentelemetry/semantic-conventions": "npm:1.27.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/ce60dbf2bd424b01824b72f533724eaf64418e01c43bef952b87dbff6d2a0f28cdcbea0d3d95c5e324f609e58721bf52ea91b5518b0e30d6bb03fb95af85cc33 + languageName: node + linkType: hard + +"@opentelemetry/sdk-metrics@npm:^1.9.1": + version: 1.26.0 + resolution: "@opentelemetry/sdk-metrics@npm:1.26.0" + dependencies: + "@opentelemetry/core": "npm:1.26.0" + "@opentelemetry/resources": "npm:1.26.0" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 10/e48e4dd1fed1e501750460e1320f89507c19287c5059cfaccc8268ad8cc3e1de40feeee6584b23626e01f9cde0f10301d08edf6a65bbd1346ef94f70ae8844f5 + languageName: node + linkType: hard + +"@opentelemetry/sdk-trace-base@npm:^1.22, @opentelemetry/sdk-trace-base@npm:^1.26.0": + version: 1.26.0 + resolution: "@opentelemetry/sdk-trace-base@npm:1.26.0" + dependencies: + "@opentelemetry/core": "npm:1.26.0" + "@opentelemetry/resources": "npm:1.26.0" + "@opentelemetry/semantic-conventions": "npm:1.27.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/e4a3d296ad908b9f58d7aefdcc1f7383fb0eb64fc85b0b5d18c4a7d829ce3d0efa5e53f5fe1a23185d9b5d97b782431384efe01aba8ba788922260a9dbbdb662 + languageName: node + linkType: hard + +"@opentelemetry/semantic-conventions@npm:1.27.0, @opentelemetry/semantic-conventions@npm:^1.27.0": + version: 1.27.0 + resolution: "@opentelemetry/semantic-conventions@npm:1.27.0" + checksum: 10/98166522f299e2fe3d43376adbdeb92679b75ebb172e2a3c4c71f2942bd91585e9537618efbbae6dc08177699e5719368edf66d7e69e8636f360b85217bbdbe1 + languageName: node + linkType: hard + +"@opentelemetry/sql-common@npm:^0.40.1": + version: 0.40.1 + resolution: "@opentelemetry/sql-common@npm:0.40.1" + dependencies: + "@opentelemetry/core": "npm:^1.1.0" + peerDependencies: + "@opentelemetry/api": ^1.1.0 + checksum: 10/f887b4135be56c9ef6e29f040c9f75f34709e38c11897d59d284d7e73175a2dd2c6267c18061144e81a0045fc461b7813769db2e49c42a8d6becc58b1456d55c + languageName: node + linkType: hard + "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -4080,6 +4497,17 @@ __metadata: languageName: node linkType: hard +"@prisma/instrumentation@npm:5.19.1": + version: 5.19.1 + resolution: "@prisma/instrumentation@npm:5.19.1" + dependencies: + "@opentelemetry/api": "npm:^1.8" + "@opentelemetry/instrumentation": "npm:^0.49 || ^0.50 || ^0.51 || ^0.52.0" + "@opentelemetry/sdk-trace-base": "npm:^1.22" + checksum: 10/62029ace33406901d1dfee136d4ae83b51d5787fbcdb104378edc890310e1989a0b0c95c1eb28fe8bfc314565aebee48189aebee600486859383d8981993045b + languageName: node + linkType: hard + "@remix-run/router@npm:1.19.2": version: 1.19.2 resolution: "@remix-run/router@npm:1.19.2" @@ -4096,6 +4524,41 @@ __metadata: languageName: node linkType: hard +"@rollup/plugin-commonjs@npm:26.0.1": + version: 26.0.1 + resolution: "@rollup/plugin-commonjs@npm:26.0.1" + dependencies: + "@rollup/pluginutils": "npm:^5.0.1" + commondir: "npm:^1.0.1" + estree-walker: "npm:^2.0.2" + glob: "npm:^10.4.1" + is-reference: "npm:1.2.1" + magic-string: "npm:^0.30.3" + peerDependencies: + rollup: ^2.68.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10/d9846fbf9c279259b5bf508da6264e18b2572e8bbd6df2c4fd96f1ae40153b231b7864426e62bff6f2f53b5a73b6db2246cacc31d4eecdaf469cc16d683c2392 + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^5.0.1": + version: 5.1.2 + resolution: "@rollup/pluginutils@npm:5.1.2" + dependencies: + "@types/estree": "npm:^1.0.0" + estree-walker: "npm:^2.0.2" + picomatch: "npm:^2.3.1" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10/cc1fe3285ab48915a6535ab2f0c90dc511bd3e63143f8e9994bb036c6c5071fd14d641cff6c89a7fde6a4faa85227d4e2cf46ee36b7d962099e0b9e4c9b8a4b0 + languageName: node + linkType: hard + "@rtsao/scc@npm:^1.1.0": version: 1.1.0 resolution: "@rtsao/scc@npm:1.1.0" @@ -4110,6 +4573,331 @@ __metadata: languageName: node linkType: hard +"@sentry-internal/browser-utils@npm:8.34.0": + version: 8.34.0 + resolution: "@sentry-internal/browser-utils@npm:8.34.0" + dependencies: + "@sentry/core": "npm:8.34.0" + "@sentry/types": "npm:8.34.0" + "@sentry/utils": "npm:8.34.0" + checksum: 10/b7561d84bce5c4a78218fd4062cbdc9950fd97c8e3a48ec8ff917703fb65c248245859993123d09b1b07cb94b544953337b59c869603e7d34573388d9e844997 + languageName: node + linkType: hard + +"@sentry-internal/feedback@npm:8.34.0": + version: 8.34.0 + resolution: "@sentry-internal/feedback@npm:8.34.0" + dependencies: + "@sentry/core": "npm:8.34.0" + "@sentry/types": "npm:8.34.0" + "@sentry/utils": "npm:8.34.0" + checksum: 10/2ad1ae70afeaa4f8716ef5ae64a99c00c896ebfd5081bcacf6e78f4de0e91d1d3a5315d862e839ae6d50b3dcba326b4b6d01552ccb374c1a52c3c82e3910aee9 + languageName: node + linkType: hard + +"@sentry-internal/replay-canvas@npm:8.34.0": + version: 8.34.0 + resolution: "@sentry-internal/replay-canvas@npm:8.34.0" + dependencies: + "@sentry-internal/replay": "npm:8.34.0" + "@sentry/core": "npm:8.34.0" + "@sentry/types": "npm:8.34.0" + "@sentry/utils": "npm:8.34.0" + checksum: 10/6ce07a242ea9050f6f4b4ac050cc385872e60b41ce2ef10bafd1fc12fe4d14c85591c86f884829951d7d010de88baa178bc0652d95d2d64fb91b665b38ad25a8 + languageName: node + linkType: hard + +"@sentry-internal/replay@npm:8.34.0": + version: 8.34.0 + resolution: "@sentry-internal/replay@npm:8.34.0" + dependencies: + "@sentry-internal/browser-utils": "npm:8.34.0" + "@sentry/core": "npm:8.34.0" + "@sentry/types": "npm:8.34.0" + "@sentry/utils": "npm:8.34.0" + checksum: 10/917f194fdc7d3638bf9a9bbd78ba6efce910e55d140f4180c9084ce161bff50c0d5e39dd37e2d98aef4e626e4e273a57e8b92977ed5500f334ca026cc977b7c8 + languageName: node + linkType: hard + +"@sentry/babel-plugin-component-annotate@npm:2.22.3": + version: 2.22.3 + resolution: "@sentry/babel-plugin-component-annotate@npm:2.22.3" + checksum: 10/481b6ec6fa6a744557bc1847f9150e779b3a04d4bd12d29d8f8e816fdcd4033bb983e97a728524605fdf663e0381f2587a49f0b922e4b7d6e35edc2577bf6a37 + languageName: node + linkType: hard + +"@sentry/browser@npm:8.34.0": + version: 8.34.0 + resolution: "@sentry/browser@npm:8.34.0" + dependencies: + "@sentry-internal/browser-utils": "npm:8.34.0" + "@sentry-internal/feedback": "npm:8.34.0" + "@sentry-internal/replay": "npm:8.34.0" + "@sentry-internal/replay-canvas": "npm:8.34.0" + "@sentry/core": "npm:8.34.0" + "@sentry/types": "npm:8.34.0" + "@sentry/utils": "npm:8.34.0" + checksum: 10/d4c27ea3ef82e957580f5f930a783c9649d81ea617129265d5c49ca5129f9d2c01f04e9f3c409f1b2e92d7644695d25d41abebd15e732e1daf318db06af32ad1 + languageName: node + linkType: hard + +"@sentry/bundler-plugin-core@npm:2.22.3": + version: 2.22.3 + resolution: "@sentry/bundler-plugin-core@npm:2.22.3" + dependencies: + "@babel/core": "npm:^7.18.5" + "@sentry/babel-plugin-component-annotate": "npm:2.22.3" + "@sentry/cli": "npm:^2.33.1" + dotenv: "npm:^16.3.1" + find-up: "npm:^5.0.0" + glob: "npm:^9.3.2" + magic-string: "npm:0.30.8" + unplugin: "npm:1.0.1" + checksum: 10/721bb4e711461d34908751d9f4cf1f770e907d06e4165e09662be18d4769f2c375de92069ae7cd7ce140110d82f85cc3db7f5d607856694ff3d9748d1404c753 + languageName: node + linkType: hard + +"@sentry/cli-darwin@npm:2.37.0": + version: 2.37.0 + resolution: "@sentry/cli-darwin@npm:2.37.0" + conditions: os=darwin + languageName: node + linkType: hard + +"@sentry/cli-linux-arm64@npm:2.37.0": + version: 2.37.0 + resolution: "@sentry/cli-linux-arm64@npm:2.37.0" + conditions: (os=linux | os=freebsd) & cpu=arm64 + languageName: node + linkType: hard + +"@sentry/cli-linux-arm@npm:2.37.0": + version: 2.37.0 + resolution: "@sentry/cli-linux-arm@npm:2.37.0" + conditions: (os=linux | os=freebsd) & cpu=arm + languageName: node + linkType: hard + +"@sentry/cli-linux-i686@npm:2.37.0": + version: 2.37.0 + resolution: "@sentry/cli-linux-i686@npm:2.37.0" + conditions: (os=linux | os=freebsd) & (cpu=x86 | cpu=ia32) + languageName: node + linkType: hard + +"@sentry/cli-linux-x64@npm:2.37.0": + version: 2.37.0 + resolution: "@sentry/cli-linux-x64@npm:2.37.0" + conditions: (os=linux | os=freebsd) & cpu=x64 + languageName: node + linkType: hard + +"@sentry/cli-win32-i686@npm:2.37.0": + version: 2.37.0 + resolution: "@sentry/cli-win32-i686@npm:2.37.0" + conditions: os=win32 & (cpu=x86 | cpu=ia32) + languageName: node + linkType: hard + +"@sentry/cli-win32-x64@npm:2.37.0": + version: 2.37.0 + resolution: "@sentry/cli-win32-x64@npm:2.37.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@sentry/cli@npm:^2.33.1": + version: 2.37.0 + resolution: "@sentry/cli@npm:2.37.0" + dependencies: + "@sentry/cli-darwin": "npm:2.37.0" + "@sentry/cli-linux-arm": "npm:2.37.0" + "@sentry/cli-linux-arm64": "npm:2.37.0" + "@sentry/cli-linux-i686": "npm:2.37.0" + "@sentry/cli-linux-x64": "npm:2.37.0" + "@sentry/cli-win32-i686": "npm:2.37.0" + "@sentry/cli-win32-x64": "npm:2.37.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-i686": + optional: true + "@sentry/cli-win32-x64": + optional: true + bin: + sentry-cli: bin/sentry-cli + checksum: 10/ab9b2899f8448e50632e090f1c32c902d8a7571f4a2638fa55c86e5ef08e9ac7b3a71c953d0e5b40731a7e05dbb8d67f27971ee0b00bd40439dcda173cc3d263 + languageName: node + linkType: hard + +"@sentry/core@npm:8.34.0": + version: 8.34.0 + resolution: "@sentry/core@npm:8.34.0" + dependencies: + "@sentry/types": "npm:8.34.0" + "@sentry/utils": "npm:8.34.0" + checksum: 10/071a382202101132f3e5ed53b72898ca1eb5f4b85bb025f3e1347d66031d7b6db4daf1b62d3ecf4c59776a03920fa24307225aae29827e5ca94d1631e47e5e9d + languageName: node + linkType: hard + +"@sentry/nextjs@npm:^8": + version: 8.34.0 + resolution: "@sentry/nextjs@npm:8.34.0" + dependencies: + "@opentelemetry/instrumentation-http": "npm:0.53.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + "@rollup/plugin-commonjs": "npm:26.0.1" + "@sentry-internal/browser-utils": "npm:8.34.0" + "@sentry/core": "npm:8.34.0" + "@sentry/node": "npm:8.34.0" + "@sentry/opentelemetry": "npm:8.34.0" + "@sentry/react": "npm:8.34.0" + "@sentry/types": "npm:8.34.0" + "@sentry/utils": "npm:8.34.0" + "@sentry/vercel-edge": "npm:8.34.0" + "@sentry/webpack-plugin": "npm:2.22.3" + chalk: "npm:3.0.0" + resolve: "npm:1.22.8" + rollup: "npm:3.29.5" + stacktrace-parser: "npm:^0.1.10" + peerDependencies: + next: ^13.2.0 || ^14.0 || ^15.0.0-rc.0 + webpack: ">=5.0.0" + peerDependenciesMeta: + webpack: + optional: true + checksum: 10/e6bc1eae0cb3d37fc5406577906663bc2df475c172c87636320b0e053babe3d88c7598fa942412c9423b26b846b712b180c03a4fb0ef0bf800ebcf88cc662115 + languageName: node + linkType: hard + +"@sentry/node@npm:8.34.0": + version: 8.34.0 + resolution: "@sentry/node@npm:8.34.0" + dependencies: + "@opentelemetry/api": "npm:^1.9.0" + "@opentelemetry/context-async-hooks": "npm:^1.25.1" + "@opentelemetry/core": "npm:^1.25.1" + "@opentelemetry/instrumentation": "npm:^0.53.0" + "@opentelemetry/instrumentation-amqplib": "npm:^0.42.0" + "@opentelemetry/instrumentation-connect": "npm:0.39.0" + "@opentelemetry/instrumentation-dataloader": "npm:0.12.0" + "@opentelemetry/instrumentation-express": "npm:0.42.0" + "@opentelemetry/instrumentation-fastify": "npm:0.39.0" + "@opentelemetry/instrumentation-fs": "npm:0.15.0" + "@opentelemetry/instrumentation-generic-pool": "npm:0.39.0" + "@opentelemetry/instrumentation-graphql": "npm:0.43.0" + "@opentelemetry/instrumentation-hapi": "npm:0.41.0" + "@opentelemetry/instrumentation-http": "npm:0.53.0" + "@opentelemetry/instrumentation-ioredis": "npm:0.43.0" + "@opentelemetry/instrumentation-kafkajs": "npm:0.3.0" + "@opentelemetry/instrumentation-koa": "npm:0.43.0" + "@opentelemetry/instrumentation-lru-memoizer": "npm:0.40.0" + "@opentelemetry/instrumentation-mongodb": "npm:0.47.0" + "@opentelemetry/instrumentation-mongoose": "npm:0.42.0" + "@opentelemetry/instrumentation-mysql": "npm:0.41.0" + "@opentelemetry/instrumentation-mysql2": "npm:0.41.0" + "@opentelemetry/instrumentation-nestjs-core": "npm:0.40.0" + "@opentelemetry/instrumentation-pg": "npm:0.44.0" + "@opentelemetry/instrumentation-redis-4": "npm:0.42.0" + "@opentelemetry/instrumentation-undici": "npm:0.6.0" + "@opentelemetry/resources": "npm:^1.26.0" + "@opentelemetry/sdk-trace-base": "npm:^1.26.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + "@prisma/instrumentation": "npm:5.19.1" + "@sentry/core": "npm:8.34.0" + "@sentry/opentelemetry": "npm:8.34.0" + "@sentry/types": "npm:8.34.0" + "@sentry/utils": "npm:8.34.0" + import-in-the-middle: "npm:^1.11.0" + checksum: 10/bb22e56925ef67f927aef923c2b68f079411f44977e68c677aae04e4f1f88f18da2c53c9d199bc4d19a5368de120ec4811e597b2043fb4308f8a5836ba334ca6 + languageName: node + linkType: hard + +"@sentry/opentelemetry@npm:8.34.0": + version: 8.34.0 + resolution: "@sentry/opentelemetry@npm:8.34.0" + dependencies: + "@sentry/core": "npm:8.34.0" + "@sentry/types": "npm:8.34.0" + "@sentry/utils": "npm:8.34.0" + peerDependencies: + "@opentelemetry/api": ^1.9.0 + "@opentelemetry/core": ^1.25.1 + "@opentelemetry/instrumentation": ^0.53.0 + "@opentelemetry/sdk-trace-base": ^1.26.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + checksum: 10/57044186671ba2ea54df190b3711e892159240d4d551155d2dd24709096be21d97d82e07a99dbf04c163d235ec0a6489f2250343a64df2236b0f7202eb604bd0 + languageName: node + linkType: hard + +"@sentry/react@npm:8.34.0": + version: 8.34.0 + resolution: "@sentry/react@npm:8.34.0" + dependencies: + "@sentry/browser": "npm:8.34.0" + "@sentry/core": "npm:8.34.0" + "@sentry/types": "npm:8.34.0" + "@sentry/utils": "npm:8.34.0" + hoist-non-react-statics: "npm:^3.3.2" + peerDependencies: + react: ^16.14.0 || 17.x || 18.x || 19.x + checksum: 10/b944695f9d671cc733a66e35f1486d2ed30a2569c8f150f433c3d73ef592159be5a280164196c42a593b9a2ed173b49aa91b9fe708616a1dcfe1a4ce82f083ab + languageName: node + linkType: hard + +"@sentry/types@npm:8.34.0": + version: 8.34.0 + resolution: "@sentry/types@npm:8.34.0" + checksum: 10/d41274c613f99f1ea4235d68922ec8d597ef044c7ca3fa9e757017cd7eae69bed944cc24ff8eb0d178656232efac00964479883502fe9c6db5dacadde51d6f96 + languageName: node + linkType: hard + +"@sentry/utils@npm:8.34.0": + version: 8.34.0 + resolution: "@sentry/utils@npm:8.34.0" + dependencies: + "@sentry/types": "npm:8.34.0" + checksum: 10/b7838aee701f3865f5a893702a7db71e70064bfc5b25bade38bad7faebc3daea10aabd0a6f8636d7b943660aed38b691ba9aca0610746b95a5d34819f4a43459 + languageName: node + linkType: hard + +"@sentry/vercel-edge@npm:8.34.0": + version: 8.34.0 + resolution: "@sentry/vercel-edge@npm:8.34.0" + dependencies: + "@sentry/core": "npm:8.34.0" + "@sentry/types": "npm:8.34.0" + "@sentry/utils": "npm:8.34.0" + checksum: 10/c51377fc2b7f36db958e181fc0878fa3e570bc5a7f6e08d4fc74fc5dcdcfb85233b280625b208b647be3c569d04708e996fb757677d7caeb30fbb4246a8fd8a5 + languageName: node + linkType: hard + +"@sentry/webpack-plugin@npm:2.22.3": + version: 2.22.3 + resolution: "@sentry/webpack-plugin@npm:2.22.3" + dependencies: + "@sentry/bundler-plugin-core": "npm:2.22.3" + unplugin: "npm:1.0.1" + uuid: "npm:^9.0.0" + peerDependencies: + webpack: ">=4.40.0" + checksum: 10/c459ffa5f13b83683479dbb9e7e919de6e59a9fce3426d662734832472f61248b77c9cf084e0499b0d9fb8f31cecdda478e997be02ba25ce45c1cf8b39b7a100 + languageName: node + linkType: hard + "@sinclair/typebox@npm:^0.27.8": version: 0.27.8 resolution: "@sinclair/typebox@npm:0.27.8" @@ -5097,6 +5885,15 @@ __metadata: languageName: node linkType: hard +"@types/connect@npm:3.4.36": + version: 3.4.36 + resolution: "@types/connect@npm:3.4.36" + dependencies: + "@types/node": "npm:*" + checksum: 10/4dee3d966fb527b98f0cbbdcf6977c9193fc3204ed539b7522fe5e64dfa45f9017bdda4ffb1f760062262fce7701a0ee1c2f6ce2e50af36c74d4e37052303172 + languageName: node + linkType: hard + "@types/css-mediaquery@npm:^0.1.1": version: 0.1.4 resolution: "@types/css-mediaquery@npm:0.1.4" @@ -5423,6 +6220,15 @@ __metadata: languageName: node linkType: hard +"@types/mysql@npm:2.15.26": + version: 2.15.26 + resolution: "@types/mysql@npm:2.15.26" + dependencies: + "@types/node": "npm:*" + checksum: 10/8f205eeaca8f94e998ce4707354bfd02b6ca0da5b7c22289f8f6ff864d549bfb95ca7ddc2f2ebe69eb8f7e3d1f5d8a5b9a2f98aee13824dbc48051bf53a1664d + languageName: node + linkType: hard + "@types/node@npm:*, @types/node@npm:^22.0.0": version: 22.7.5 resolution: "@types/node@npm:22.7.5" @@ -5455,6 +6261,37 @@ __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:*": + version: 8.11.10 + resolution: "@types/pg@npm:8.11.10" + dependencies: + "@types/node": "npm:*" + pg-protocol: "npm:*" + pg-types: "npm:^4.0.1" + checksum: 10/65b7d7ca9c90b7cb94aa94ad94bb1883356845e1f64688bc824ecd499da25f63a2400f0a58500554637048a7cc8b91055bbfe14301c082ce9669afd0c18e414c + languageName: node + linkType: hard + +"@types/pg@npm:8.6.1": + version: 8.6.1 + resolution: "@types/pg@npm:8.6.1" + dependencies: + "@types/node": "npm:*" + pg-protocol: "npm:*" + pg-types: "npm:^2.2.0" + checksum: 10/bf1134ea194ad9cb8bfe0aab7a532713c63bae1d95909fa45e8dc1945e44ede74f2d4c5b2cd2f9712c6b970896929e0d82480f9c9da79addf405c089b590e562 + languageName: node + linkType: hard + "@types/prop-types@npm:*, @types/prop-types@npm:^15.7.12, @types/prop-types@npm:^15.7.3": version: 15.7.13 resolution: "@types/prop-types@npm:15.7.13" @@ -5557,6 +6394,13 @@ __metadata: languageName: node linkType: hard +"@types/shimmer@npm:^1.0.2, @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/sizzle@npm:*": version: 2.3.8 resolution: "@types/sizzle@npm:2.3.8" @@ -7471,6 +8315,16 @@ __metadata: languageName: node linkType: hard +"chalk@npm:3.0.0, chalk@npm:^3.0.0": + version: 3.0.0 + resolution: "chalk@npm:3.0.0" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10/37f90b31fd655fb49c2bd8e2a68aebefddd64522655d001ef417e6f955def0ed9110a867ffc878a533f2dafea5f2032433a37c8a7614969baa7f8a1cd424ddfc + languageName: node + linkType: hard + "chalk@npm:5.3.0, chalk@npm:^5.0.0, chalk@npm:^5.0.1, chalk@npm:^5.2.0, chalk@npm:^5.3.0": version: 5.3.0 resolution: "chalk@npm:5.3.0" @@ -7489,16 +8343,6 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^3.0.0": - version: 3.0.0 - resolution: "chalk@npm:3.0.0" - dependencies: - ansi-styles: "npm:^4.1.0" - supports-color: "npm:^7.1.0" - checksum: 10/37f90b31fd655fb49c2bd8e2a68aebefddd64522655d001ef417e6f955def0ed9110a867ffc878a533f2dafea5f2032433a37c8a7614969baa7f8a1cd424ddfc - languageName: node - linkType: hard - "chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" @@ -7682,7 +8526,7 @@ __metadata: languageName: node linkType: hard -"cjs-module-lexer@npm:^1.0.0, cjs-module-lexer@npm:^1.2.3": +"cjs-module-lexer@npm:^1.0.0, cjs-module-lexer@npm:^1.2.2, cjs-module-lexer@npm:^1.2.3": version: 1.4.1 resolution: "cjs-module-lexer@npm:1.4.1" checksum: 10/6e830a1e00a34d416949bbc1924f3e8da65cef4a6a09e2b7fa35722e2d1c34bf378d3baca987b698d1cbc3eb83e44b044039b4e82755c96f30e0f03d1d227637 @@ -9065,7 +9909,7 @@ __metadata: languageName: node linkType: hard -"dotenv@npm:^16.4.5": +"dotenv@npm:^16.3.1, dotenv@npm:^16.4.5": version: 16.4.5 resolution: "dotenv@npm:16.4.5" checksum: 10/55a3134601115194ae0f924e54473459ed0d9fc340ae610b676e248cca45aa7c680d86365318ea964e6da4e2ea80c4514c1adab5adb43d6867fb57ff068f95c8 @@ -10150,6 +10994,13 @@ __metadata: languageName: node linkType: hard +"estree-walker@npm:^2.0.2": + version: 2.0.2 + resolution: "estree-walker@npm:2.0.2" + checksum: 10/b02109c5d46bc2ed47de4990eef770f7457b1159a229f0999a09224d2b85ffeed2d7679cffcff90aeb4448e94b0168feb5265b209cdec29aad50a3d6e93d21e2 + languageName: node + linkType: hard + "estree-walker@npm:^3.0.3": version: 3.0.3 resolution: "estree-walker@npm:3.0.3" @@ -10994,7 +11845,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.0.0, glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.3": +"glob@npm:^10.0.0, glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.3, glob@npm:^10.4.1": version: 10.4.5 resolution: "glob@npm:10.4.5" dependencies: @@ -11024,6 +11875,18 @@ __metadata: languageName: node linkType: hard +"glob@npm:^9.3.2": + version: 9.3.5 + resolution: "glob@npm:9.3.5" + dependencies: + fs.realpath: "npm:^1.0.0" + minimatch: "npm:^8.0.2" + minipass: "npm:^4.2.4" + path-scurry: "npm:^1.6.1" + checksum: 10/e5fa8a58adf53525bca42d82a1fad9e6800032b7e4d372209b80cfdca524dd9a7dbe7d01a92d7ed20d89c572457f12c250092bc8817cb4f1c63efefdf9b658c0 + languageName: node + linkType: hard + "global-modules@npm:^1.0.0": version: 1.0.0 resolution: "global-modules@npm:1.0.0" @@ -11356,7 +12219,7 @@ __metadata: languageName: node linkType: hard -"hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1": +"hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" dependencies: @@ -11654,6 +12517,18 @@ __metadata: languageName: node linkType: hard +"import-in-the-middle@npm:^1.11.0, import-in-the-middle@npm:^1.8.1": + version: 1.11.2 + resolution: "import-in-the-middle@npm:1.11.2" + dependencies: + acorn: "npm:^8.8.2" + acorn-import-attributes: "npm:^1.9.5" + cjs-module-lexer: "npm:^1.2.2" + module-details-from-path: "npm:^1.0.3" + checksum: 10/ebd1aaba4441e54db124670e13038127f5283b686d83276dc004cd9d3bb1747e63ac37935c3c58885b52aedf48e669093d24ffe4b5849adef744d79ee67445ad + languageName: node + linkType: hard + "import-lazy@npm:^4.0.0": version: 4.0.0 resolution: "import-lazy@npm:4.0.0" @@ -12194,6 +13069,15 @@ __metadata: languageName: node linkType: hard +"is-reference@npm:1.2.1": + version: 1.2.1 + resolution: "is-reference@npm:1.2.1" + dependencies: + "@types/estree": "npm:*" + checksum: 10/e7b48149f8abda2c10849ea51965904d6a714193d68942ad74e30522231045acf06cbfae5a4be2702fede5d232e61bf50b3183acdc056e6e3afe07fcf4f4b2bc + languageName: node + linkType: hard + "is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" @@ -13653,6 +14537,24 @@ __metadata: languageName: node linkType: hard +"magic-string@npm:0.30.8": + version: 0.30.8 + resolution: "magic-string@npm:0.30.8" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.4.15" + checksum: 10/72ab63817af600e92c19dc8489c1aa4a9599da00cfd59b2319709bd48fb0cf533fdf354bf140ac86e598dbd63e6b2cc83647fe8448f864a3eb6061c62c94e784 + languageName: node + linkType: hard + +"magic-string@npm:^0.30.3": + version: 0.30.12 + resolution: "magic-string@npm:0.30.12" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + checksum: 10/98016180a52b28efc1362152b45671067facccdaead6b70c1c14c566cba98491bc2e1336474b0996397730dca24400e85649da84d3da62b2560ed03c067573e6 + languageName: node + linkType: hard + "magic-string@npm:^0.30.5": version: 0.30.11 resolution: "magic-string@npm:0.30.11" @@ -13671,6 +14573,7 @@ __metadata: "@faker-js/faker": "npm:^8.4.1" "@mitodl/course-search-utils": "npm:3.2.4" "@remixicon/react": "npm:^4.2.0" + "@sentry/nextjs": "npm:^8" "@tanstack/react-query": "npm:^4.36.1" "@testing-library/jest-dom": "npm:^6.4.8" "@testing-library/react": "npm:^16.0.0" @@ -14931,6 +15834,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^8.0.2": + version: 8.0.4 + resolution: "minimatch@npm:8.0.4" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10/aef05598ee565e1013bc8a10f53410ac681561f901c1a084b8ecfd016c9ed919f58f4bbd5b63e05643189dfb26e8106a84f0e1ff12e4a263aa37e1cae7ce9828 + languageName: node + linkType: hard + "minimatch@npm:^9.0.0, minimatch@npm:^9.0.1, minimatch@npm:^9.0.4": version: 9.0.5 resolution: "minimatch@npm:9.0.5" @@ -15027,6 +15939,13 @@ __metadata: languageName: node linkType: hard +"minipass@npm:^4.2.4": + version: 4.2.8 + resolution: "minipass@npm:4.2.8" + checksum: 10/e148eb6dcb85c980234cad889139ef8ddf9d5bdac534f4f0268446c8792dd4c74f4502479be48de3c1cce2f6450f6da4d0d4a86405a8a12be04c1c36b339569a + languageName: node + linkType: hard + "minipass@npm:^5.0.0": version: 5.0.0 resolution: "minipass@npm:5.0.0" @@ -15068,6 +15987,13 @@ __metadata: languageName: node linkType: hard +"module-details-from-path@npm:^1.0.3": + version: 1.0.3 + resolution: "module-details-from-path@npm:1.0.3" + checksum: 10/f93226e9154fc8cb91f4609b639167ec7ad9155b30be4924d9717656648a3ae5f181d4e2338434d4c5afc7b5f4c10dd3b64109e5b89a4be70b20a25ba3573d54 + languageName: node + linkType: hard + "moment@npm:^2.15.2, moment@npm:^2.29.4": version: 2.30.1 resolution: "moment@npm:2.30.1" @@ -15218,7 +16144,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.6.12": +"node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.7": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: @@ -15554,6 +16480,13 @@ __metadata: languageName: node linkType: hard +"obuf@npm:~1.1.2": + version: 1.1.2 + resolution: "obuf@npm:1.1.2" + checksum: 10/53ff4ab3a13cc33ba6c856cf281f2965c0aec9720967af450e8fd06cfd50aceeefc791986a16bcefa14e7898b3ca9acdfcf15b9d9a1b9c7e1366581a8ad6e65e + languageName: node + linkType: hard + "ol-ckeditor@npm:0.0.0, ol-ckeditor@workspace:frontends/ol-ckeditor": version: 0.0.0-use.local resolution: "ol-ckeditor@workspace:frontends/ol-ckeditor" @@ -16145,7 +17078,7 @@ __metadata: languageName: node linkType: hard -"path-scurry@npm:^1.10.1, path-scurry@npm:^1.11.1": +"path-scurry@npm:^1.10.1, path-scurry@npm:^1.11.1, path-scurry@npm:^1.6.1": version: 1.11.1 resolution: "path-scurry@npm:1.11.1" dependencies: @@ -16196,6 +17129,55 @@ __metadata: languageName: node linkType: hard +"pg-int8@npm:1.0.1": + version: 1.0.1 + resolution: "pg-int8@npm:1.0.1" + checksum: 10/a1e3a05a69005ddb73e5f324b6b4e689868a447c5fa280b44cd4d04e6916a344ac289e0b8d2695d66e8e89a7fba023affb9e0e94778770ada5df43f003d664c9 + languageName: node + linkType: hard + +"pg-numeric@npm:1.0.2": + version: 1.0.2 + resolution: "pg-numeric@npm:1.0.2" + checksum: 10/8899f8200caa1744439a8778a9eb3ceefb599d893e40a09eef84ee0d4c151319fd416634a6c0fc7b7db4ac268710042da5be700b80ef0de716fe089b8652c84f + languageName: node + linkType: hard + +"pg-protocol@npm:*": + version: 1.7.0 + resolution: "pg-protocol@npm:1.7.0" + checksum: 10/ffffdf74426c9357b57050f1c191e84447c0e8b2a701b3ab302ac7dd0eb27b862d92e5e3b2d38876a1051de83547eb9165d6a58b3a8e90bb050dae97f9993d54 + languageName: node + linkType: hard + +"pg-types@npm:^2.2.0": + version: 2.2.0 + resolution: "pg-types@npm:2.2.0" + dependencies: + pg-int8: "npm:1.0.1" + postgres-array: "npm:~2.0.0" + postgres-bytea: "npm:~1.0.0" + postgres-date: "npm:~1.0.4" + postgres-interval: "npm:^1.1.0" + checksum: 10/87a84d4baa91378d3a3da6076c69685eb905d1087bf73525ae1ba84b291b9dd8738c6716b333d8eac6cec91bf087237adc3e9281727365e9cbab0d9d072778b1 + languageName: node + linkType: hard + +"pg-types@npm:^4.0.1": + version: 4.0.2 + resolution: "pg-types@npm:4.0.2" + dependencies: + pg-int8: "npm:1.0.1" + pg-numeric: "npm:1.0.2" + postgres-array: "npm:~3.0.1" + postgres-bytea: "npm:~3.0.0" + postgres-date: "npm:~2.1.0" + postgres-interval: "npm:^3.0.0" + postgres-range: "npm:^1.1.1" + checksum: 10/f4d529da864d4169afab300eb8629a84a6a06aa70c471160a7e46c34b6d4dd0e61cbd57d10d98c3a36e98f474e2ff85d41e4b1c953a321146b4bae09372c58d3 + languageName: node + linkType: hard + "picocolors@npm:^1.0.0, picocolors@npm:^1.1.0": version: 1.1.0 resolution: "picocolors@npm:1.1.0" @@ -16817,6 +17799,73 @@ __metadata: languageName: node linkType: hard +"postgres-array@npm:~2.0.0": + version: 2.0.0 + resolution: "postgres-array@npm:2.0.0" + checksum: 10/aff99e79714d1271fe942fec4ffa2007b755e7e7dc3d2feecae3f1ceecb86fd3637c8138037fc3d9e7ec369231eeb136843c0b25927bf1ce295245a40ef849b4 + languageName: node + linkType: hard + +"postgres-array@npm:~3.0.1": + version: 3.0.2 + resolution: "postgres-array@npm:3.0.2" + checksum: 10/0159517e4e5f263bf9e324f0c4d3c10244a294021f2b5980abc8c23afdb965370a7fc0c82012fce4d28e83186ad089b6476b05fcef6c88f8e43e37a3a2fa0ad5 + languageName: node + linkType: hard + +"postgres-bytea@npm:~1.0.0": + version: 1.0.0 + resolution: "postgres-bytea@npm:1.0.0" + checksum: 10/d844ae4ca7a941b70e45cac1261a73ee8ed39d72d3d74ab1d645248185a1b7f0ac91a3c63d6159441020f4e1f7fe64689ac56536a307b31cef361e5187335090 + languageName: node + linkType: hard + +"postgres-bytea@npm:~3.0.0": + version: 3.0.0 + resolution: "postgres-bytea@npm:3.0.0" + dependencies: + obuf: "npm:~1.1.2" + checksum: 10/f5c01758fd2fa807afbd34e1ba2146f683818ebc2d23f4a62f0fd627c0b1126fc543cab1b63925f97ce6c7d8f5f316043218619c447445210ea82f10411efb1b + languageName: node + linkType: hard + +"postgres-date@npm:~1.0.4": + version: 1.0.7 + resolution: "postgres-date@npm:1.0.7" + checksum: 10/571ef45bec4551bb5d608c31b79987d7a895141f7d6c7b82e936a52d23d97474c770c6143e5cf8936c1cdc8b0dfd95e79f8136bf56a90164182a60f242c19f2b + languageName: node + linkType: hard + +"postgres-date@npm:~2.1.0": + version: 2.1.0 + resolution: "postgres-date@npm:2.1.0" + checksum: 10/faa1c70dfad0e35bd4aa7cb6088fcd4e4f039aa25dc42150129178fc2a0baa7e37eca0bf18e4142a40dea18d1955459b08783f78ec487ef27b4b93ab5e854597 + languageName: node + linkType: hard + +"postgres-interval@npm:^1.1.0": + version: 1.2.0 + resolution: "postgres-interval@npm:1.2.0" + dependencies: + xtend: "npm:^4.0.0" + checksum: 10/746b71f93805ae33b03528e429dc624706d1f9b20ee81bf743263efb6a0cd79ae02a642a8a480dbc0f09547b4315ab7df6ce5ec0be77ed700bac42730f5c76b2 + languageName: node + linkType: hard + +"postgres-interval@npm:^3.0.0": + version: 3.0.0 + resolution: "postgres-interval@npm:3.0.0" + checksum: 10/c7a1cf006de97de663b6b8c4d2b167aa9909a238c4866a94b15d303762f5ac884ff4796cd6e2111b7f0a91302b83c570453aa8506fd005b5a5d5dfa87441bebc + languageName: node + linkType: hard + +"postgres-range@npm:^1.1.1": + version: 1.1.4 + resolution: "postgres-range@npm:1.1.4" + checksum: 10/035759f17b44bf9ba7e71a30402ed2ca1e2b7fabb3ad794b08169a5b453d38d06905a6dfb51fe41a3f6d9fac4e183dac9e769b95053053db933be16785edce1f + languageName: node + linkType: hard + "posthog-js@npm:^1.157.2": version: 1.167.0 resolution: "posthog-js@npm:1.167.0" @@ -16911,6 +17960,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-inflight@npm:^1.0.1": version: 1.0.1 resolution: "promise-inflight@npm:1.0.1" @@ -17775,6 +18831,17 @@ __metadata: languageName: node linkType: hard +"require-in-the-middle@npm:^7.1.1": + version: 7.4.0 + resolution: "require-in-the-middle@npm:7.4.0" + dependencies: + debug: "npm:^4.3.5" + module-details-from-path: "npm:^1.0.3" + resolve: "npm:^1.22.8" + checksum: 10/0ca30ad6a6183423f38599709fc8a670682db85b581a66cb31ea31342e8ba2ce7dca44ee29e8cfe4fb59ffcb0c2b0f9b77d44a10cdc7535c7c2907028e53afbf + languageName: node + linkType: hard + "requires-port@npm:^1.0.0": version: 1.0.0 resolution: "requires-port@npm:1.0.0" @@ -17849,7 +18916,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.6, resolve@npm:^1.1.7, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.4, resolve@npm:^1.22.8": +"resolve@npm:1.22.8, resolve@npm:^1.1.6, resolve@npm:^1.1.7, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.4, resolve@npm:^1.22.8": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -17875,7 +18942,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin": +"resolve@patch:resolve@npm%3A1.22.8#optional!builtin, resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -17956,6 +19023,20 @@ __metadata: languageName: node linkType: hard +"rollup@npm:3.29.5": + version: 3.29.5 + resolution: "rollup@npm:3.29.5" + dependencies: + fsevents: "npm:~2.3.2" + dependenciesMeta: + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10/5ce0e5f1d9288d4954db93993477f894eb3042ec98a7c9c19980e53b1f58296481e3dc6c2b1a2a3680b20eb6c3fe64ed97942d5ff29df658a059647c33b3593c + languageName: node + linkType: hard + "run-async@npm:^2.4.0": version: 2.4.1 resolution: "run-async@npm:2.4.1" @@ -18108,7 +19189,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.6.3, semver@npm:^7.1.1, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.2, semver@npm:^7.6.3": +"semver@npm:7.6.3, semver@npm:^7.1.1, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.2, semver@npm:^7.6.3": version: 7.6.3 resolution: "semver@npm:7.6.3" bin: @@ -18345,6 +19426,13 @@ __metadata: languageName: node linkType: hard +"shimmer@npm:^1.2.1": + version: 1.2.1 + resolution: "shimmer@npm:1.2.1" + checksum: 10/aa0d6252ad1c682a4fdfda69e541be987f7a265ac7b00b1208e5e48cc68dc55f293955346ea4c71a169b7324b82c70f8400b3d3d2d60b2a7519f0a3522423250 + languageName: node + linkType: hard + "side-channel@npm:^1.0.4, side-channel@npm:^1.0.6": version: 1.0.6 resolution: "side-channel@npm:1.0.6" @@ -18617,6 +19705,15 @@ __metadata: languageName: node linkType: hard +"stacktrace-parser@npm:^0.1.10": + version: 0.1.10 + resolution: "stacktrace-parser@npm:0.1.10" + dependencies: + type-fest: "npm:^0.7.1" + checksum: 10/f4fbddfc09121d91e587b60de4beb4941108e967d71ad3a171812dc839b010ca374d064ad0a296295fed13acd103609d99a4224a25b4e67de13cae131f1901ee + languageName: node + linkType: hard + "statuses@npm:2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" @@ -19820,6 +20917,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^0.7.1": + version: 0.7.1 + resolution: "type-fest@npm:0.7.1" + checksum: 10/0699b6011bb3f7fac5fd5385e2e09432cde08fa89283f24084f29db00ec69a5445cd3aa976438ec74fc552a9a96f4a04ed390b5cb62eb7483aa4b6e5b935e059 + languageName: node + linkType: hard + "type-fest@npm:^1.0.1, type-fest@npm:^1.2.1, type-fest@npm:^1.2.2": version: 1.4.0 resolution: "type-fest@npm:1.4.0" @@ -20240,6 +21344,18 @@ __metadata: languageName: node linkType: hard +"unplugin@npm:1.0.1": + version: 1.0.1 + resolution: "unplugin@npm:1.0.1" + dependencies: + acorn: "npm:^8.8.1" + chokidar: "npm:^3.5.3" + webpack-sources: "npm:^3.2.3" + webpack-virtual-modules: "npm:^0.5.0" + checksum: 10/59f0d29c634adbc56e7e770f9753bff9ec52c479ff837b798354ec5d1b2e8cb971412645df43eb14a698db5bff4db23634c1506657e24d1ba86f4a8f27c1bf87 + languageName: node + linkType: hard + "unplugin@npm:^1.3.1": version: 1.14.1 resolution: "unplugin@npm:1.14.1" @@ -20695,6 +21811,13 @@ __metadata: languageName: node linkType: hard +"webpack-virtual-modules@npm:^0.5.0": + version: 0.5.0 + resolution: "webpack-virtual-modules@npm:0.5.0" + checksum: 10/65a8f90c7e6609ba1c4ad2697bb83ae662485893fb545f6aa9a74e3a5d7485bbc50ef057c5bc3feca25d3153ebf9c097c233cbe4d67b52418bc84348dfb20c1a + languageName: node + linkType: hard + "webpack-virtual-modules@npm:^0.6.0, webpack-virtual-modules@npm:^0.6.2": version: 0.6.2 resolution: "webpack-virtual-modules@npm:0.6.2" @@ -20870,7 +21993,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: From d13cc86642c99935f88b3361ccb7c0c8b7ebe77a Mon Sep 17 00:00:00 2001 From: Chris Chudzicki Date: Wed, 16 Oct 2024 11:55:45 -0400 Subject: [PATCH 2/9] add env vars to CI --- .github/workflows/ci.yml | 20 +++++++++++++++++++- frontends/main/Dockerfile.web | 18 ++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 314c94ba73..f8cd27c49d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -177,11 +177,29 @@ jobs: SUPPORT_EMAIL: mitlearn-support@mit.edu MITOL_AXIOS_WITH_CREDENTIALS: true CSRF_COOKIE_NAME: learn-rc-csrftoken + NEXT_PUBLIC_SENTRY_DSN: ${{ secrets.SENTRY_DSN_RC }} + NEXT_PUBLIC_SENTRY_ENV: rc + NEXT_PUBLIC_SENTRY_PROFILES_SAMPLE_RATE: 0.0 + NEXT_PUBLIC_SENTRY_TRACES_SAMPLE_RATE: 0.0 + NEXT_PUBLIC_VERSION: ${{ github.sha }} + NEXT_PUBLIC_POSTHOG_API_KEY: ${{ secrets.POSTHOG_API_KEY_RC }} run: | heroku container:push web \ --app mitopen-rc-nextjs \ --recursive \ - --arg NEXT_PUBLIC_ORIGIN=$ORIGIN,NEXT_PUBLIC_MITOL_API_BASE_URL=$MITOL_API_BASE_URL,NEXT_PUBLIC_SITE_NAME="$SITE_NAME",NEXT_PUBLIC_MITOL_SUPPORT_EMAIL=$SUPPORT_EMAIL,NEXT_PUBLIC_EMBEDLY_KEY=$EMBEDLY_KEY,NEXT_PUBLIC_MITOL_AXIOS_WITH_CREDENTIALS=$MITOL_AXIOS_WITH_CREDENTIALS,NEXT_PUBLIC_CSRF_COOKIE_NAME=$CSRF_COOKIE_NAME \ + --arg NEXT_PUBLIC_ORIGIN=$ORIGIN,\ + NEXT_PUBLIC_MITOL_API_BASE_URL=$MITOL_API_BASE_URL,\ + NEXT_PUBLIC_SITE_NAME="$SITE_NAME",\ + NEXT_PUBLIC_MITOL_SUPPORT_EMAIL=$SUPPORT_EMAIL,\ + NEXT_PUBLIC_EMBEDLY_KEY=$EMBEDLY_KEY,\ + NEXT_PUBLIC_MITOL_AXIOS_WITH_CREDENTIALS=$MITOL_AXIOS_WITH_CREDENTIALS,\ + NEXT_PUBLIC_CSRF_COOKIE_NAME=$CSRF_COOKIE_NAME,\ + NEXT_PUBLIC_VERSION=$NEXT_PUBLIC_VERSION,\ + NEXT_PUBLIC_SENTRY_DSN=$NEXT_PUBLIC_SENTRY_DSN,\ + NEXT_PUBLIC_SENTRY_ENV=$NEXT_PUBLIC_SENTRY_ENV,\ + NEXT_PUBLIC_SENTRY_PROFILES_SAMPLE_RATE=$NEXT_PUBLIC_SENTRY_PROFILES_SAMPLE_RATE,\ + NEXT_PUBLIC_SENTRY_TRACES_SAMPLE_RATE=$NEXT_PUBLIC_SENTRY_TRACES_SAMPLE_RATE,\ + NEXT_PUBLIC_POSTHOG_API_KEY=$NEXT_PUBLIC_POSTHOG_API_KEY \ --context-path . - name: Release on Heroku diff --git a/frontends/main/Dockerfile.web b/frontends/main/Dockerfile.web index 4033007f28..36e4b9b550 100644 --- a/frontends/main/Dockerfile.web +++ b/frontends/main/Dockerfile.web @@ -73,6 +73,24 @@ ENV NEXT_PUBLIC_MITOL_SUPPORT_EMAIL=$NEXT_PUBLIC_MITOL_SUPPORT_EMAIL ARG NEXT_PUBLIC_EMBEDLY_KEY=None ENV NEXT_PUBLIC_EMBEDLY_KEY=$NEXT_PUBLIC_EMBEDLY_KEY +ARG NEXT_PUBLIC_SENTRY_DSN +ENV NEXT_PUBLIC_SENTRY_DSN=$NEXT_PUBLIC_SENTRY_DSN + +ARG NEXT_PUBLIC_SENTRY_ENV +ENV NEXT_PUBLIC_SENTRY_ENV=$NEXT_PUBLIC_SENTRY_ENV + +ARG NEXT_PUBLIC_VERSION +ENV NEXT_PUBLIC_VERSION=$NEXT_PUBLIC_VERSION + +ARG NEXT_PUBLIC_SENTRY_PROFILES_SAMPLE_RATE +ENV NEXT_PUBLIC_SENTRY_PROFILES_SAMPLE_RATE=$NEXT_PUBLIC_SENTRY_PROFILES_SAMPLE_RATE + +ARG NEXT_PUBLIC_SENTRY_TRACES_SAMPLE_RATE +ENV NEXT_PUBLIC_SENTRY_TRACES_SAMPLE_RATE=$NEXT_PUBLIC_SENTRY_TRACES_SAMPLE_RATE + +ARG NEXT_PUBLIC_POSTHOG_API_KEY +ENV NEXT_PUBLIC_POSTHOG_API_KEY=$NEXT_PUBLIC_POSTHOG_API_KEY + ARG NEXT_PUBLIC_MITOL_AXIOS_WITH_CREDENTIALS=true ENV NEXT_PUBLIC_MITOL_AXIOS_WITH_CREDENTIALS=$NEXT_PUBLIC_MITOL_AXIOS_WITH_CREDENTIALS From d0f918394212641fc477cb8a64206bda1acdd49c Mon Sep 17 00:00:00 2001 From: Chris Chudzicki Date: Wed, 16 Oct 2024 14:34:57 -0400 Subject: [PATCH 3/9] add global styles to global-error --- frontends/main/src/app/global-error.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontends/main/src/app/global-error.tsx b/frontends/main/src/app/global-error.tsx index 89fe497bf6..17198a0c85 100644 --- a/frontends/main/src/app/global-error.tsx +++ b/frontends/main/src/app/global-error.tsx @@ -15,17 +15,17 @@ import React, { useEffect } from "react" import * as Sentry from "@sentry/nextjs" import FallbackErrorPage from "@/app-pages/ErrorPage/FallbackErrorPage" -import { ThemeProvider } from "ol-components" +import { MITLearnGlobalStyles, ThemeProvider } from "ol-components" export default function GlobalError({ error }: { error: Error }) { useEffect(() => { Sentry.captureException(error) }, [error]) - return ( + From 0fa1b8e15e88c3904150f32c896a5256365ea0ad Mon Sep 17 00:00:00 2001 From: Chris Chudzicki Date: Wed, 16 Oct 2024 14:35:12 -0400 Subject: [PATCH 4/9] TEMPORARY self destruct button --- frontends/main/src/page-components/Header/Header.tsx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/frontends/main/src/page-components/Header/Header.tsx b/frontends/main/src/page-components/Header/Header.tsx index 833a565ef3..d6ac7d8f52 100644 --- a/frontends/main/src/page-components/Header/Header.tsx +++ b/frontends/main/src/page-components/Header/Header.tsx @@ -287,6 +287,15 @@ const Header: FunctionComponent = () => { onClick={toggler} drawerOpen={drawerOpen} /> + From 3f85f0fe2e01b0637b52ab1e37b834b87c1d927e Mon Sep 17 00:00:00 2001 From: Chris Chudzicki Date: Wed, 16 Oct 2024 15:24:13 -0400 Subject: [PATCH 5/9] cleanup --- .../main/src/app-pages/ErrorPage/FallbackErrorPage.tsx | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/frontends/main/src/app-pages/ErrorPage/FallbackErrorPage.tsx b/frontends/main/src/app-pages/ErrorPage/FallbackErrorPage.tsx index 3a2875db11..50b7984c4a 100644 --- a/frontends/main/src/app-pages/ErrorPage/FallbackErrorPage.tsx +++ b/frontends/main/src/app-pages/ErrorPage/FallbackErrorPage.tsx @@ -4,19 +4,15 @@ import React from "react" import ErrorPageTemplate from "./ErrorPageTemplate" import { Typography } from "ol-components" -// Double check type Error below -// Sentry wizard thinks it should be -// import Error from "next/error"; - -const GlobalErrorPage = ({ error }: { error: Pick }) => { +const FallbackErrorPage = ({ error }: { error: Pick }) => { return ( Something went wrong. - {error.message || ""} + {error.message} ) } -export default GlobalErrorPage +export default FallbackErrorPage From c2e7e9c079ad435446b1d902185c798b989a5f8f Mon Sep 17 00:00:00 2001 From: Chris Chudzicki Date: Wed, 16 Oct 2024 15:45:54 -0400 Subject: [PATCH 6/9] cleanup error boundary, other misc cleanup --- frontends/main/sentry.client.config.ts | 6 -- frontends/main/src/app/error.tsx | 7 ++ frontends/main/src/app/layout.tsx | 5 +- .../main/src/app/sentry-example-page/page.tsx | 26 +++++- .../ErrorBoundary/ErrorBoundary.tsx | 79 ------------------- .../src/page-components/Header/Header.tsx | 2 +- 6 files changed, 33 insertions(+), 92 deletions(-) delete mode 100644 frontends/main/src/components/ErrorBoundary/ErrorBoundary.tsx diff --git a/frontends/main/sentry.client.config.ts b/frontends/main/sentry.client.config.ts index 854c772137..b0feb7266b 100644 --- a/frontends/main/sentry.client.config.ts +++ b/frontends/main/sentry.client.config.ts @@ -18,13 +18,7 @@ Sentry.init({ : [], // Add optional integrations for additional features integrations: [ - Sentry.replayIntegration(), Sentry.browserTracingIntegration(), Sentry.browserProfilingIntegration(), ], - - // Define how likely Replay events are sampled. - // This sets the sample rate to be 10%. You may want this to be 100% while - // in development and sample at a lower rate in production - replaysSessionSampleRate: 0.1, }) diff --git a/frontends/main/src/app/error.tsx b/frontends/main/src/app/error.tsx index fc2151b2ff..9f9e217d31 100644 --- a/frontends/main/src/app/error.tsx +++ b/frontends/main/src/app/error.tsx @@ -12,10 +12,17 @@ import React, { useEffect } from "react" import * as Sentry from "@sentry/nextjs" import FallbackErrorPage from "@/app-pages/ErrorPage/FallbackErrorPage" +import { ForbiddenError } from "@/common/permissions" +import ForbiddenPage from "@/app-pages/ErrorPage/ForbiddenPage" const Error = ({ error }: { error: Error }) => { useEffect(() => { Sentry.captureException(error) }, [error]) + + if (error instanceof ForbiddenError) { + return + } + return } diff --git a/frontends/main/src/app/layout.tsx b/frontends/main/src/app/layout.tsx index d483f47d20..a43a4e6ab5 100644 --- a/frontends/main/src/app/layout.tsx +++ b/frontends/main/src/app/layout.tsx @@ -5,7 +5,6 @@ import { PageWrapper, PageWrapperInner } from "./styled" import Providers from "./providers" import { MITLearnGlobalStyles } from "ol-components" import Script from "next/script" -import ErrorBoundary from "@/components/ErrorBoundary/ErrorBoundary" import "./GlobalStyles" @@ -30,9 +29,7 @@ export default function RootLayout({
- - {children} - + {children}