diff --git a/.gitignore b/.gitignore
index 15792151937..be82451fb3e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -177,3 +177,6 @@ tmp
# shared-cms
libs/shared/cms/src/__generated__/graphql.d.ts
libs/shared/cms/src/__generated__/graphql.js
+
+# Sentry Config File
+.env.sentry-build-plugin
diff --git a/apps/payments/next/.env.development b/apps/payments/next/.env.development
index 4314faed68a..0b4ec9d9f87 100644
--- a/apps/payments/next/.env.development
+++ b/apps/payments/next/.env.development
@@ -79,5 +79,18 @@ STATS_D_CONFIG__PREFIX=
CSP__ACCOUNTS_STATIC_CDN=https://accounts-static.cdn.mozilla.net
CSP__PAYPAL_API='https://www.sandbox.paypal.com'
+# Sentry Config
+SENTRY__SERVER_NAME=fxa-payments-next-server
+SENTRY__AUTH_TOKEN=
+
# Other
CONTENT_SERVER_URL=http://localhost:3030
+
+# Nextjs Public Environment Variables
+
+# Sentry Config
+NEXT_PUBLIC_SENTRY_DSN=
+NEXT_PUBLIC_SENTRY_ENV=local
+NEXT_PUBLIC_SENTRY_CLIENT_NAME=fxa-payments-next-client
+NEXT_PUBLIC_SENTRY_SAMPLE_RATE=1
+NEXT_PUBLIC_SENTRY_TRACES_SAMPLE_RATE=1
diff --git a/apps/payments/next/.env.production b/apps/payments/next/.env.production
index ad547d5fea9..76849e816a8 100644
--- a/apps/payments/next/.env.production
+++ b/apps/payments/next/.env.production
@@ -75,5 +75,18 @@ STATS_D_CONFIG__PREFIX=
CSP__ACCOUNTS_STATIC_CDN=https://accounts-static.cdn.mozilla.net
CSP__PAYPAL_API='https://www.paypal.com'
+# Sentry Config
+SENTRY__SERVER_NAME=fxa-payments-next-server
+SENTRY__AUTH_TOKEN=
+
# Other
CONTENT_SERVER_URL=https://accounts.firefox.com
+
+# Nextjs Public Environment Variables
+
+# Sentry Config
+NEXT_PUBLIC_SENTRY_DSN=
+NEXT_PUBLIC_SENTRY_ENV=prod
+NEXT_PUBLIC_SENTRY_CLIENT_NAME=fxa-payments-next-client
+NEXT_PUBLIC_SENTRY_SAMPLE_RATE=1
+NEXT_PUBLIC_SENTRY_TRACES_SAMPLE_RATE=1
diff --git a/apps/payments/next/app/global-error.tsx b/apps/payments/next/app/global-error.tsx
new file mode 100644
index 00000000000..b9871b7a0fc
--- /dev/null
+++ b/apps/payments/next/app/global-error.tsx
@@ -0,0 +1,31 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+'use client';
+
+import * as Sentry from '@sentry/nextjs';
+import NextError from 'next/error';
+import { useEffect } from 'react';
+
+export default function GlobalError({
+ error,
+}: {
+ error: Error & { digest?: string };
+}) {
+ useEffect(() => {
+ Sentry.captureException(error);
+ }, [error]);
+
+ return (
+
+
+ {/* `NextError` is the default Next.js error page component. Its type
+ definition requires a `statusCode` prop. However, since the App Router
+ does not expose status codes for errors, we simply pass 0 to render a
+ generic error message. */}
+
+
+
+ );
+}
diff --git a/apps/payments/next/config/index.ts b/apps/payments/next/config/index.ts
index cbe1c91fe02..d04b9949df9 100644
--- a/apps/payments/next/config/index.ts
+++ b/apps/payments/next/config/index.ts
@@ -1,7 +1,18 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
import 'reflect-metadata';
import 'server-only';
import { Type } from 'class-transformer';
-import { IsString, ValidateNested, IsDefined, IsUrl } from 'class-validator';
+import {
+ IsString,
+ ValidateNested,
+ IsDefined,
+ IsUrl,
+ IsNumber,
+ IsOptional,
+} from 'class-validator';
import {
RootConfig as NestAppRootConfig,
validate,
@@ -20,6 +31,14 @@ class PaypalConfig {
clientId!: string;
}
+class SentryServerConfig {
+ @IsString()
+ serverName!: string;
+
+ @IsString()
+ authToken!: string;
+}
+
class AuthJSConfig {
@IsUrl({ require_tld: false })
issuerUrl!: string;
@@ -47,6 +66,11 @@ export class PaymentsNextConfig extends NestAppRootConfig {
@IsDefined()
csp!: CspConfig;
+ @Type(() => SentryServerConfig)
+ @ValidateNested()
+ @IsDefined()
+ sentry!: SentryServerConfig;
+
@IsString()
authSecret!: string;
@@ -55,6 +79,29 @@ export class PaymentsNextConfig extends NestAppRootConfig {
@IsUrl({ require_tld: false })
contentServerUrl!: string;
+
+ /**
+ * Nextjs Public Environment Variables
+ */
+
+ /**
+ * Sentry Config
+ */
+ @IsOptional()
+ @IsString()
+ nextPublicSentryDsn?: string;
+
+ @IsString()
+ nextPublicSentryEnv!: string;
+
+ @IsString()
+ nextPublicSentryClientName!: string;
+
+ @IsNumber()
+ nextPublicSentrySampleRate!: number;
+
+ @IsNumber()
+ nextPublicSentryTracesSampleRate!: number;
}
export const config = validate(process.env, PaymentsNextConfig);
diff --git a/apps/payments/next/instrumentation.ts b/apps/payments/next/instrumentation.ts
index bbf1019bd5b..a70f089c313 100644
--- a/apps/payments/next/instrumentation.ts
+++ b/apps/payments/next/instrumentation.ts
@@ -1,5 +1,10 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
export async function register() {
if (process.env.NEXT_RUNTIME === 'nodejs') {
+ await import('./sentry.server.config');
const { getApp } = await import('@fxa/payments/ui/server');
await getApp().initialize();
diff --git a/apps/payments/next/next.config.js b/apps/payments/next/next.config.js
index 0c48bf5bc54..21a45564f9b 100644
--- a/apps/payments/next/next.config.js
+++ b/apps/payments/next/next.config.js
@@ -6,6 +6,7 @@
// eslint-disable-next-line @typescript-eslint/no-var-requires
const { composePlugins, withNx } = require('@nx/next');
+const { withSentryConfig } = require('@sentry/nextjs');
/**
* @type {import('@nx/next/plugins/with-nx').WithNxOptions}
@@ -22,6 +23,8 @@ const nextConfig = {
'@nestjs/core',
'@nestjs/common',
'@nestjs/websockets',
+ '@nestjs/graphql',
+ '@nestjs/mapped-types',
'class-transformer',
'class-validator',
'hot-shots',
@@ -50,9 +53,54 @@ const nextConfig = {
},
};
+/**
+ * @type {import('@sentry/nextjs').SentryBuildOptions}
+ **/
+const sentryOptions = {
+ // For all available options, see:
+ // https://github.com/getsentry/sentry-webpack-plugin#options
+
+ org: "mozilla",
+ project: "fxa-payments-next",
+
+ // Enable source maps
+ authToken: process.env.SENTRY_AUTH_TOKEN,
+
+ // 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,
+
+ // Automatically annotate React components to show their full name in breadcrumbs and session replay
+ reactComponentAnnotation: {
+ enabled: true,
+ },
+
+ // 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,
+}
+
+// Use withSentryConfig to wrap the next config
+const sentryEnhancedConfig = (passedConfig) =>
+ withSentryConfig(passedConfig, sentryOptions);
+
const plugins = [
// Add more Next.js plugins to this list if needed.
withNx,
+ sentryEnhancedConfig,
];
module.exports = composePlugins(...plugins)(nextConfig);
diff --git a/apps/payments/next/package.json b/apps/payments/next/package.json
index 3cc4dddab56..134dfa915ed 100644
--- a/apps/payments/next/package.json
+++ b/apps/payments/next/package.json
@@ -1,6 +1,6 @@
{
"name": "payments-next",
- "version": "0.0.1",
+ "version": "0.0.0",
"scripts": {
"start": "next start"
}
diff --git a/apps/payments/next/sentry.client.config.ts b/apps/payments/next/sentry.client.config.ts
new file mode 100644
index 00000000000..ebcb19de740
--- /dev/null
+++ b/apps/payments/next/sentry.client.config.ts
@@ -0,0 +1,30 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// 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 { initSentryForNextjsClient } from '@fxa/shared/sentry/client';
+import { version } from './package.json';
+
+const DEFAULT_SAMPLE_RATE = '1';
+const DEFAULT_TRACES_SAMPLE_RATE = '1';
+
+const sentryConfig = {
+ dsn: process.env.NEXT_PUBLIC_SENTRY_DSN,
+ env: process.env.NEXT_PUBLIC_SENTRY_ENV,
+ clientName: process.env.NEXT_PUBLIC_SENTRY_CLIENT_NAME,
+ sampleRate: parseInt(
+ process.env.NEXT_PUBLIC_SENTRY_SAMPLE_RATE || DEFAULT_SAMPLE_RATE
+ ),
+ tracesSampleRate: parseInt(
+ process.env.NEXT_PUBLIC_SENTRY_TRACES_SAMPLE_RATE ||
+ DEFAULT_TRACES_SAMPLE_RATE
+ ),
+};
+
+initSentryForNextjsClient({
+ release: version,
+ sentry: sentryConfig,
+});
diff --git a/apps/payments/next/sentry.server.config.ts b/apps/payments/next/sentry.server.config.ts
new file mode 100644
index 00000000000..874e481433a
--- /dev/null
+++ b/apps/payments/next/sentry.server.config.ts
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// 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 { initSentryForNextjsServer } from '@fxa/shared/sentry';
+import { config } from './config';
+import { version } from './package.json';
+
+const sentryConfig = {
+ dsn: config.nextPublicSentryDsn,
+ env: config.nextPublicSentryEnv,
+ serverName: config.sentry.serverName,
+ sampleRate: config.nextPublicSentrySampleRate,
+ tracesSampleRate: config.nextPublicSentryTracesSampleRate,
+};
+
+initSentryForNextjsServer(
+ {
+ release: version,
+ sentry: sentryConfig,
+ },
+ console
+);
diff --git a/libs/payments/ui/src/lib/config.utils.ts b/libs/payments/ui/src/lib/config.utils.ts
index e5e65dbbb2a..cfa63bbd573 100644
--- a/libs/payments/ui/src/lib/config.utils.ts
+++ b/libs/payments/ui/src/lib/config.utils.ts
@@ -1,3 +1,7 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
import set from 'set-value';
import { plainToInstance, ClassConstructor } from 'class-transformer';
import { validateSync } from 'class-validator';
diff --git a/libs/shared/sentry/src/client.ts b/libs/shared/sentry/src/client.ts
new file mode 100644
index 00000000000..944d17e32a8
--- /dev/null
+++ b/libs/shared/sentry/src/client.ts
@@ -0,0 +1,5 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+export * from './lib/next/client';
diff --git a/libs/shared/sentry/src/index.ts b/libs/shared/sentry/src/index.ts
index c7cf32bee03..01974618a4f 100644
--- a/libs/shared/sentry/src/index.ts
+++ b/libs/shared/sentry/src/index.ts
@@ -8,3 +8,4 @@ export * from './lib/nest/sentry.constants';
export * from './lib/reporting';
export * from './lib/node';
export * from './lib/browser';
+export * from './lib/next/server';
diff --git a/libs/shared/sentry/src/lib/next/client.ts b/libs/shared/sentry/src/lib/next/client.ts
new file mode 100644
index 00000000000..78f0eeb8060
--- /dev/null
+++ b/libs/shared/sentry/src/lib/next/client.ts
@@ -0,0 +1,54 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// 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';
+import { SentryConfigOpts } from '../models/SentryConfigOpts';
+import { buildSentryConfig } from '../config-builder';
+import { Logger } from '../sentry.types';
+import { beforeSend } from '../utils/beforeSend.client';
+
+/**
+ * @@todo - To be worked on in FXA-10398
+ */
+const sentryEnabled = true;
+
+export function initSentryForNextjsClient(
+ config: SentryConfigOpts,
+ log?: Logger
+) {
+ if (!log) {
+ log = console;
+ }
+
+ if (!config?.sentry?.dsn) {
+ log.error('No Sentry dsn provided');
+ return;
+ }
+
+ // We want sentry to be disabled by default... This is because we only emit data
+ // for users that 'have opted in'. A subsequent call to 'enable' is needed to ensure
+ // that sentry events only flow under the proper circumstances.
+ //disable();
+
+ const opts = buildSentryConfig(config, log);
+ try {
+ Sentry.init({
+ ...opts,
+ integrations: [
+ Sentry.browserTracingIntegration({
+ enableInp: true,
+ }),
+ ],
+ beforeSend: function (event: Sentry.ErrorEvent) {
+ return beforeSend(sentryEnabled, opts, event);
+ },
+ });
+ } catch (e) {
+ log.error(e);
+ }
+}
diff --git a/libs/shared/sentry/src/lib/next/server.ts b/libs/shared/sentry/src/lib/next/server.ts
new file mode 100644
index 00000000000..a880817acbb
--- /dev/null
+++ b/libs/shared/sentry/src/lib/next/server.ts
@@ -0,0 +1,63 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+import * as Sentry from '@sentry/nextjs';
+import { ErrorEvent } from '@sentry/types';
+import { SentryConfigOpts } from '../models/SentryConfigOpts';
+import { buildSentryConfig } from '../config-builder';
+import { Logger } from '../sentry.types';
+import { tagFxaName } from '../utils/tagFxaName';
+
+type ExtraOpts = {
+ integrations?: any[];
+ eventFilters?: Array<(event: ErrorEvent, hint: any) => ErrorEvent>;
+};
+
+type InitSentryOpts = SentryConfigOpts & ExtraOpts;
+
+export function initSentryForNextjsServer(config: InitSentryOpts, log: Logger) {
+ if (!config?.sentry?.dsn) {
+ log.error('No Sentry dsn provided. Cannot start sentry');
+ return;
+ }
+
+ const opts = buildSentryConfig(config, log);
+ /**
+ * @@todo - Move to lib/utils/beforeSend.server.ts - FXA-10402
+ */
+ const beforeSend = function (event: ErrorEvent, hint: any) {
+ // Default
+ event = tagFxaName(event, config.sentry?.serverName || 'unknown');
+
+ // Custom filters
+ config.eventFilters?.forEach((filter) => {
+ event = filter(event, hint);
+ });
+ return event;
+ };
+
+ const integrations = [
+ // Default
+ Sentry.extraErrorDataIntegration({ depth: 5 }),
+
+ // Custom Integrations
+ ...(config.integrations || []),
+ ];
+
+ try {
+ Sentry.init({
+ // Defaults Options
+ normalizeDepth: 6,
+ maxValueLength: 500,
+
+ // Custom Options
+ integrations,
+ beforeSend,
+ ...opts,
+ });
+ } catch (e) {
+ log.debug('init-sentry', { msg: 'Issue initializing sentry!' });
+ log.error('init-sentry', e);
+ }
+}
diff --git a/libs/shared/sentry/src/lib/node.ts b/libs/shared/sentry/src/lib/node.ts
index f533f4a0a46..bb43a9d521c 100644
--- a/libs/shared/sentry/src/lib/node.ts
+++ b/libs/shared/sentry/src/lib/node.ts
@@ -24,6 +24,9 @@ export function initSentry(config: InitSentryOpts, log: Logger) {
}
const opts = buildSentryConfig(config, log);
+ /**
+ * @@todo - Move to lib/utils/beforeSend.server.ts - FXA-10402
+ */
const beforeSend = function (event: ErrorEvent, hint: any) {
// Default
event = tagFxaName(event, config.sentry?.serverName || 'unknown');
diff --git a/libs/shared/sentry/src/lib/utils/beforeSend.client.spec.ts b/libs/shared/sentry/src/lib/utils/beforeSend.client.spec.ts
new file mode 100644
index 00000000000..58dd59d1cdb
--- /dev/null
+++ b/libs/shared/sentry/src/lib/utils/beforeSend.client.spec.ts
@@ -0,0 +1,137 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+import { SentryConfigOpts } from '../models/SentryConfigOpts';
+import { beforeSend } from './beforeSend.client';
+import * as Sentry from '@sentry/nextjs';
+
+const config: SentryConfigOpts = {
+ release: 'v0.0.0',
+ sentry: {
+ dsn: 'https://public:private@host:8080/1',
+ env: 'test',
+ clientName: 'fxa-shared-testing',
+ sampleRate: 0,
+ },
+};
+
+const sentryEnabled = true;
+
+describe('beforeSend', () => {
+ it('works without request url', () => {
+ const data = {
+ key: 'value',
+ } as unknown as Sentry.ErrorEvent;
+
+ const resultData = beforeSend(sentryEnabled, config, data);
+
+ expect(data).toEqual(resultData);
+ });
+
+ it('fingerprints errno', () => {
+ const data = {
+ request: {
+ url: 'https://example.com',
+ },
+ tags: {
+ errno: '100',
+ },
+ type: undefined,
+ } as Sentry.ErrorEvent;
+
+ const resultData = beforeSend(sentryEnabled, config, data);
+ expect(resultData?.fingerprint?.[0]).toEqual('errno100');
+ expect(resultData?.level).toEqual('info');
+ });
+
+ it('properly erases sensitive information from url', () => {
+ const url = 'https://accounts.firefox.com/complete_reset_password';
+ const badQuery =
+ '?token=foo&code=bar&email=some%40restmail.net&service=sync';
+ const goodQuery = '?token=VALUE&code=VALUE&email=VALUE&service=sync';
+ const badData = {
+ request: {
+ url: url + badQuery,
+ },
+ } as Sentry.ErrorEvent;
+
+ const goodData = {
+ request: {
+ url: url + goodQuery,
+ },
+ };
+
+ const resultData = beforeSend(sentryEnabled, config, badData);
+ expect(resultData?.request?.url).toEqual(goodData.request.url);
+ });
+
+ it('properly erases sensitive information from referrer', () => {
+ const url = 'https://accounts.firefox.com/complete_reset_password';
+ const badQuery =
+ '?token=foo&code=bar&email=some%40restmail.net&service=sync';
+ const goodQuery = '?token=VALUE&code=VALUE&email=VALUE&service=sync';
+ const badData = {
+ request: {
+ headers: {
+ Referer: url + badQuery,
+ },
+ },
+ type: undefined,
+ } as Sentry.ErrorEvent;
+
+ const goodData = {
+ request: {
+ headers: {
+ Referer: url + goodQuery,
+ },
+ },
+ };
+
+ const resultData = beforeSend(sentryEnabled, config, badData);
+ expect(resultData?.request?.headers?.Referer).toEqual(
+ goodData.request.headers.Referer
+ );
+ });
+
+ it('properly erases sensitive information from abs_path', () => {
+ const url = 'https://accounts.firefox.com/complete_reset_password';
+ const badCulprit = 'https://accounts.firefox.com/scripts/57f6d4e4.main.js';
+ const badAbsPath =
+ 'https://accounts.firefox.com/complete_reset_password?token=foo&code=bar&email=a@a.com&service=sync&resume=barbar';
+ const goodAbsPath =
+ 'https://accounts.firefox.com/complete_reset_password?token=VALUE&code=VALUE&email=VALUE&service=sync&resume=VALUE';
+ const data = {
+ culprit: badCulprit,
+ exception: {
+ values: [
+ {
+ stacktrace: {
+ frames: [
+ {
+ abs_path: badAbsPath, // eslint-disable-line camelcase
+ },
+ {
+ abs_path: badAbsPath, // eslint-disable-line camelcase
+ },
+ ],
+ },
+ },
+ ],
+ },
+ request: {
+ url,
+ },
+ type: undefined,
+ };
+
+ const resultData = beforeSend(sentryEnabled, config, data);
+
+ expect(
+ resultData?.exception?.values?.[0].stacktrace?.frames?.[0].abs_path
+ ).toEqual(goodAbsPath);
+ expect(
+ resultData?.exception?.values?.[0].stacktrace?.frames?.[1].abs_path
+ ).toEqual(goodAbsPath);
+ });
+});
diff --git a/libs/shared/sentry/src/lib/utils/beforeSend.client.ts b/libs/shared/sentry/src/lib/utils/beforeSend.client.ts
new file mode 100644
index 00000000000..0e84b763bdf
--- /dev/null
+++ b/libs/shared/sentry/src/lib/utils/beforeSend.client.ts
@@ -0,0 +1,65 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Change to @sentry/browser after upgrade to Sentry 8
+import * as Sentry from '@sentry/nextjs';
+import { cleanUpQueryParam } from './cleanUpQueryParam';
+import { SentryConfigOpts } from '../models/SentryConfigOpts';
+import { tagFxaName } from './tagFxaName';
+
+/**
+ * function that gets called before data gets sent to error metrics
+ *
+ * @param {Object} event
+ * Error object data
+ * @returns {Object} data
+ * Modified error object data
+ * @private
+ */
+export function beforeSend(
+ sentryEnabled: boolean,
+ opts: SentryConfigOpts,
+ event: Sentry.ErrorEvent
+) {
+ if (sentryEnabled === false) {
+ return null;
+ }
+
+ if (event.request) {
+ if (event.request.url) {
+ event.request.url = cleanUpQueryParam(event.request.url);
+ }
+
+ if (event.tags) {
+ // if this is a known errno, then use grouping with fingerprints
+ // Docs: https://docs.sentry.io/hosted/learn/rollups/#fallback-grouping
+ if (event.tags.errno) {
+ event.fingerprint = ['errno' + (event.tags.errno as number)];
+ // if it is a known error change the error level to info.
+ event.level = 'info';
+ }
+ }
+
+ if (event.exception?.values) {
+ event.exception.values.forEach((value: Sentry.Exception) => {
+ if (value.stacktrace && value.stacktrace.frames) {
+ value.stacktrace.frames.forEach((frame: { abs_path?: string }) => {
+ if (frame.abs_path) {
+ frame.abs_path = cleanUpQueryParam(frame.abs_path); // eslint-disable-line camelcase
+ }
+ });
+ }
+ });
+ }
+
+ if (event.request.headers?.Referer) {
+ event.request.headers.Referer = cleanUpQueryParam(
+ event.request.headers.Referer
+ );
+ }
+ }
+
+ event = tagFxaName(event, opts.sentry?.clientName || opts.sentry?.serverName);
+ return event;
+}
diff --git a/libs/shared/sentry/src/lib/utils/cleanUpQueryParam.spec.ts b/libs/shared/sentry/src/lib/utils/cleanUpQueryParam.spec.ts
new file mode 100644
index 00000000000..235a597c101
--- /dev/null
+++ b/libs/shared/sentry/src/lib/utils/cleanUpQueryParam.spec.ts
@@ -0,0 +1,34 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+import { cleanUpQueryParam } from './cleanUpQueryParam';
+
+describe('cleanUpQueryParam', () => {
+ it('properly erases sensitive information', () => {
+ const fixtureUrl1 =
+ 'https://accounts.firefox.com/complete_reset_password?token=foo&code=bar&email=some%40restmail.net';
+ const expectedUrl1 =
+ 'https://accounts.firefox.com/complete_reset_password?token=VALUE&code=VALUE&email=VALUE';
+ const resultUrl1 = cleanUpQueryParam(fixtureUrl1);
+
+ expect(resultUrl1).toEqual(expectedUrl1);
+ });
+
+ it('properly erases sensitive information, keeps allowed fields', () => {
+ const fixtureUrl2 =
+ 'https://accounts.firefox.com/signup?client_id=foo&service=sync';
+ const expectedUrl2 =
+ 'https://accounts.firefox.com/signup?client_id=foo&service=sync';
+ const resultUrl2 = cleanUpQueryParam(fixtureUrl2);
+
+ expect(resultUrl2).toEqual(expectedUrl2);
+ });
+
+ it('properly returns the url when there is no query', () => {
+ const expectedUrl = 'https://accounts.firefox.com/signup';
+ const resultUrl = cleanUpQueryParam(expectedUrl);
+
+ expect(resultUrl).toEqual(expectedUrl);
+ });
+});
diff --git a/libs/shared/sentry/src/lib/utils/cleanUpQueryParam.ts b/libs/shared/sentry/src/lib/utils/cleanUpQueryParam.ts
new file mode 100644
index 00000000000..0d56c6ada1a
--- /dev/null
+++ b/libs/shared/sentry/src/lib/utils/cleanUpQueryParam.ts
@@ -0,0 +1,44 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Query parameters we allow to propagate to sentry
+ */
+const ALLOWED_QUERY_PARAMETERS = [
+ 'automatedBrowser',
+ 'client_id',
+ 'context',
+ 'entrypoint',
+ 'keys',
+ 'migration',
+ 'redirect_uri',
+ 'scope',
+ 'service',
+ 'setting',
+ 'style',
+];
+
+/**
+ * Overwrites sensitive query parameters with a dummy value.
+ *
+ * @param url
+ * @returns url
+ */
+export function cleanUpQueryParam(url = '') {
+ const urlObj = new URL(url);
+
+ if (!urlObj.search.length) {
+ return url;
+ }
+
+ // Iterate the search parameters.
+ urlObj.searchParams.forEach((_, key) => {
+ if (!ALLOWED_QUERY_PARAMETERS.includes(key)) {
+ // if the param is a PII (not allowed) then reset the value.
+ urlObj.searchParams.set(key, 'VALUE');
+ }
+ });
+
+ return urlObj.href;
+}
diff --git a/libs/shared/sentry/src/lib/utils/tagFxaName.ts b/libs/shared/sentry/src/lib/utils/tagFxaName.ts
new file mode 100644
index 00000000000..2a373e970f1
--- /dev/null
+++ b/libs/shared/sentry/src/lib/utils/tagFxaName.ts
@@ -0,0 +1,10 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/** Adds fxa.name to data.tags */
+export function tagFxaName(data: any, name?: string) {
+ data.tags = data.tags || {};
+ data.tags['fxa.name'] = name || 'unknown';
+ return data;
+}
diff --git a/package.json b/package.json
index 225e667ea4b..1db64be5b20 100644
--- a/package.json
+++ b/package.json
@@ -78,6 +78,7 @@
"@radix-ui/react-tooltip": "^1.1.2",
"@sentry/browser": "^7.113.0",
"@sentry/integrations": "^7.113.0",
+ "@sentry/nextjs": "^8",
"@sentry/node": "^7.113.0",
"@sentry/opentelemetry-node": "^7.113.0",
"@swc/helpers": "0.5.11",
@@ -276,7 +277,8 @@
"tap/typescript": "^4.5.2",
"terser:>4.0.0 <5": ">=4.8.1",
"terser:>5 <6": ">=5.14.2",
- "underscore": ">=1.13.2"
+ "underscore": ">=1.13.2",
+ "@sentry/types": "^7.113.0"
},
"packageManager": "yarn@3.3.0",
"_moduleAliases": {
diff --git a/tsconfig.base.json b/tsconfig.base.json
index d39c37c253e..3e1ef13e35f 100644
--- a/tsconfig.base.json
+++ b/tsconfig.base.json
@@ -61,6 +61,7 @@
"@fxa/shared/pem-jwk": ["libs/shared/pem-jwk/src/index.ts"],
"@fxa/shared/react": ["libs/shared/react/src/index.ts"],
"@fxa/shared/sentry": ["libs/shared/sentry/src/index.ts"],
+ "@fxa/shared/sentry/client": ["libs/shared/sentry/src/client.ts"],
"@fxa/vendored/common-password-list": [
"libs/vendored/common-password-list/src/index.ts"
],
diff --git a/yarn.lock b/yarn.lock
index b447a18f6f0..d7a2e1ee1a4 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -12284,6 +12284,13 @@ __metadata:
languageName: node
linkType: hard
+"@jridgewell/sourcemap-codec@npm:^1.5.0":
+ version: 1.5.0
+ resolution: "@jridgewell/sourcemap-codec@npm:1.5.0"
+ checksum: 05df4f2538b3b0f998ea4c1cd34574d0feba216fa5d4ccaef0187d12abf82eafe6021cec8b49f9bb4d90f2ba4582ccc581e72986a5fcf4176ae0cfeb04cf52ec
+ languageName: node
+ linkType: hard
+
"@jridgewell/trace-mapping@npm:0.3.9":
version: 0.3.9
resolution: "@jridgewell/trace-mapping@npm:0.3.9"
@@ -13967,6 +13974,15 @@ __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": ^1.0.0
+ checksum: 500cd35527580732921d198bd7007224402cb89fef791f0b64bea839c9f2ad796d54486ee9aee0ee6422ded3963cba793408086eda0adfec2bd1d66f9114d96c
+ languageName: node
+ linkType: hard
+
"@opentelemetry/api@npm:^1.0.0":
version: 1.0.0
resolution: "@opentelemetry/api@npm:1.0.0"
@@ -13981,6 +13997,13 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/api@npm:^1.8, @opentelemetry/api@npm:^1.9.0":
+ version: 1.9.0
+ resolution: "@opentelemetry/api@npm:1.9.0"
+ checksum: 9e88e59d53ced668f3daaecfd721071c5b85a67dd386f1c6f051d1be54375d850016c881f656ffbe9a03bedae85f7e89c2f2b635313f9c9b195ad033cdc31020
+ languageName: node
+ linkType: hard
+
"@opentelemetry/api@npm:^1.8.0":
version: 1.8.0
resolution: "@opentelemetry/api@npm:1.8.0"
@@ -14051,6 +14074,15 @@ __metadata:
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: f0fe5bfa3aeed99fbe7d6f6157e3bcc2e4450850a62ef60e551812f3e5aa72cb81e38de8c4e1b6934c93e18579a503664597f78e7e7d9904e271f59c939a3e02
+ languageName: node
+ linkType: hard
+
"@opentelemetry/context-zone-peer-dep@npm:1.23.0, @opentelemetry/context-zone-peer-dep@npm:^1.23.0":
version: 1.23.0
resolution: "@opentelemetry/context-zone-peer-dep@npm:1.23.0"
@@ -14115,6 +14147,28 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/core@npm:1.25.1":
+ version: 1.25.1
+ resolution: "@opentelemetry/core@npm:1.25.1"
+ dependencies:
+ "@opentelemetry/semantic-conventions": 1.25.1
+ peerDependencies:
+ "@opentelemetry/api": ">=1.0.0 <1.10.0"
+ checksum: ba1672fde4a1cfd9b55bf6070db71b808702fe59c4a70cda52a6156b2c813827954a6b4d3c3641283d394ff75a69b6359a0487459b4d26cd7d714ab3d21bc780
+ languageName: node
+ linkType: hard
+
+"@opentelemetry/core@npm:1.26.0, @opentelemetry/core@npm:^1.25.1":
+ version: 1.26.0
+ resolution: "@opentelemetry/core@npm:1.26.0"
+ dependencies:
+ "@opentelemetry/semantic-conventions": 1.27.0
+ peerDependencies:
+ "@opentelemetry/api": ">=1.0.0 <1.10.0"
+ checksum: e5b06b4d69605927b850109c6b898f00a6a921171b3bf62335a4e00b9a170c1b93ddef6d7f8cc480a551faeaf81074b594f4462a91d4fbc4b313e64ff9ebd717
+ languageName: node
+ linkType: hard
+
"@opentelemetry/core@npm:1.8.0, @opentelemetry/core@npm:^1.8.0":
version: 1.8.0
resolution: "@opentelemetry/core@npm:1.8.0"
@@ -14279,6 +14333,20 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/instrumentation-connect@npm:0.38.0":
+ version: 0.38.0
+ resolution: "@opentelemetry/instrumentation-connect@npm:0.38.0"
+ dependencies:
+ "@opentelemetry/core": ^1.8.0
+ "@opentelemetry/instrumentation": ^0.52.0
+ "@opentelemetry/semantic-conventions": ^1.22.0
+ "@types/connect": 3.4.36
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 4dff447ff9a7ee2ca94872d904df260213e8e05b27742713f8dce35593ec8f52bcb07adfb7730e7b208b8b49566e032cdee316f0ccea405e42ffc5804d222750
+ languageName: node
+ linkType: hard
+
"@opentelemetry/instrumentation-connect@npm:^0.35.0":
version: 0.35.0
resolution: "@opentelemetry/instrumentation-connect@npm:0.35.0"
@@ -14344,6 +14412,19 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/instrumentation-express@npm:0.41.1":
+ version: 0.41.1
+ resolution: "@opentelemetry/instrumentation-express@npm:0.41.1"
+ dependencies:
+ "@opentelemetry/core": ^1.8.0
+ "@opentelemetry/instrumentation": ^0.52.0
+ "@opentelemetry/semantic-conventions": ^1.22.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: fe2939ab377cc4b1c6dfe77cae6d23156ccd227cc9984bf03eb5f108fa048815d6dd0be9a8240bb3bd053a271789c9928a9e544725e2e099709e9b2c60d456f0
+ languageName: node
+ linkType: hard
+
"@opentelemetry/instrumentation-express@npm:^0.37.0":
version: 0.37.0
resolution: "@opentelemetry/instrumentation-express@npm:0.37.0"
@@ -14357,6 +14438,19 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/instrumentation-fastify@npm:0.38.0":
+ version: 0.38.0
+ resolution: "@opentelemetry/instrumentation-fastify@npm:0.38.0"
+ dependencies:
+ "@opentelemetry/core": ^1.8.0
+ "@opentelemetry/instrumentation": ^0.52.0
+ "@opentelemetry/semantic-conventions": ^1.22.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 3cd7996398d783397782fc327a336e37b1eaabee6c9d8a25daa15d86cf6634408bc790e67207548dcae61f064a4a85780d9ae51bc31414bd61e0291d22a8d3f8
+ languageName: node
+ linkType: hard
+
"@opentelemetry/instrumentation-fastify@npm:^0.35.0":
version: 0.35.0
resolution: "@opentelemetry/instrumentation-fastify@npm:0.35.0"
@@ -14384,6 +14478,18 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/instrumentation-fs@npm:0.14.0":
+ version: 0.14.0
+ resolution: "@opentelemetry/instrumentation-fs@npm:0.14.0"
+ dependencies:
+ "@opentelemetry/core": ^1.8.0
+ "@opentelemetry/instrumentation": ^0.52.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: cc6b90e9496bddbbc992adf3cb585b728260e6b22d35e48720e06505e2477e962bd1b62d9d1bf331c877c04ce7b393d87d2f61a3ade08519b73252a342351bf0
+ languageName: node
+ linkType: hard
+
"@opentelemetry/instrumentation-fs@npm:^0.11.0":
version: 0.11.0
resolution: "@opentelemetry/instrumentation-fs@npm:0.11.0"
@@ -14409,6 +14515,17 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/instrumentation-graphql@npm:0.42.0":
+ version: 0.42.0
+ resolution: "@opentelemetry/instrumentation-graphql@npm:0.42.0"
+ dependencies:
+ "@opentelemetry/instrumentation": ^0.52.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: cae523cf75312457dc176a1ae2e4157b41025c5d01d8174467c8a62f8031c3a90151888fcdd804778183f58618ec320a24fe78f5bb0a1a72a119dc37245be676
+ languageName: node
+ linkType: hard
+
"@opentelemetry/instrumentation-graphql@npm:^0.39.0":
version: 0.39.0
resolution: "@opentelemetry/instrumentation-graphql@npm:0.39.0"
@@ -14432,6 +14549,19 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/instrumentation-hapi@npm:0.40.0":
+ version: 0.40.0
+ resolution: "@opentelemetry/instrumentation-hapi@npm:0.40.0"
+ dependencies:
+ "@opentelemetry/core": ^1.8.0
+ "@opentelemetry/instrumentation": ^0.52.0
+ "@opentelemetry/semantic-conventions": ^1.22.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 71ff845ca2376b5f1cf7514d649f829044dec6486e784351a26278afc092a1cd90eb0eaf34ab79afcae9244e8b126d6059ac0c7c286743ceb8e12126cf7e0255
+ languageName: node
+ linkType: hard
+
"@opentelemetry/instrumentation-hapi@npm:^0.36.0":
version: 0.36.0
resolution: "@opentelemetry/instrumentation-hapi@npm:0.36.0"
@@ -14446,6 +14576,20 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/instrumentation-http@npm:0.52.1":
+ version: 0.52.1
+ resolution: "@opentelemetry/instrumentation-http@npm:0.52.1"
+ dependencies:
+ "@opentelemetry/core": 1.25.1
+ "@opentelemetry/instrumentation": 0.52.1
+ "@opentelemetry/semantic-conventions": 1.25.1
+ semver: ^7.5.2
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 67a31e14d9ee4da745b7529777c1525f717b2ddf09f2a9247acaa9677f32e4a863d8f0712c95917fdbe74d8211cf650065bb3a95ef2fdd9f81630e063cbc2d4f
+ languageName: node
+ linkType: hard
+
"@opentelemetry/instrumentation-http@npm:^0.50.0":
version: 0.50.0
resolution: "@opentelemetry/instrumentation-http@npm:0.50.0"
@@ -14460,6 +14604,19 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/instrumentation-ioredis@npm:0.42.0":
+ version: 0.42.0
+ resolution: "@opentelemetry/instrumentation-ioredis@npm:0.42.0"
+ dependencies:
+ "@opentelemetry/instrumentation": ^0.52.0
+ "@opentelemetry/redis-common": ^0.36.2
+ "@opentelemetry/semantic-conventions": ^1.23.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: ae4804732b4380007b09ba11051aae927da0c53cd74d556916a838fb4de4f3c2aa7156bc05c4f34e6669411835604a4587822b2b585c51042e502d0e5079c143
+ languageName: node
+ linkType: hard
+
"@opentelemetry/instrumentation-ioredis@npm:^0.39.0":
version: 0.39.0
resolution: "@opentelemetry/instrumentation-ioredis@npm:0.39.0"
@@ -14486,6 +14643,19 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/instrumentation-koa@npm:0.42.0":
+ version: 0.42.0
+ resolution: "@opentelemetry/instrumentation-koa@npm:0.42.0"
+ dependencies:
+ "@opentelemetry/core": ^1.8.0
+ "@opentelemetry/instrumentation": ^0.52.0
+ "@opentelemetry/semantic-conventions": ^1.22.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 4e41f4b1c2abb4d31151ae3b5999af3247affa99fadcf87ff542a8523f108275d83a54057d79453ff56bc40938a622803562db87c826bfac9f99fb409207c6fd
+ languageName: node
+ linkType: hard
+
"@opentelemetry/instrumentation-koa@npm:^0.39.0":
version: 0.39.0
resolution: "@opentelemetry/instrumentation-koa@npm:0.39.0"
@@ -14525,6 +14695,19 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/instrumentation-mongodb@npm:0.46.0":
+ version: 0.46.0
+ resolution: "@opentelemetry/instrumentation-mongodb@npm:0.46.0"
+ dependencies:
+ "@opentelemetry/instrumentation": ^0.52.0
+ "@opentelemetry/sdk-metrics": ^1.9.1
+ "@opentelemetry/semantic-conventions": ^1.22.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: fab5db536e2e95177a0ae0975bd8b9fc76f2d59bf89a6023547ba39071b97789859e1ac0582f86498a263611403a70b5f543b025207180770c07e178b04af5ad
+ languageName: node
+ linkType: hard
+
"@opentelemetry/instrumentation-mongodb@npm:^0.42.0":
version: 0.42.0
resolution: "@opentelemetry/instrumentation-mongodb@npm:0.42.0"
@@ -14538,6 +14721,19 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/instrumentation-mongoose@npm:0.40.0":
+ version: 0.40.0
+ resolution: "@opentelemetry/instrumentation-mongoose@npm:0.40.0"
+ dependencies:
+ "@opentelemetry/core": ^1.8.0
+ "@opentelemetry/instrumentation": ^0.52.0
+ "@opentelemetry/semantic-conventions": ^1.22.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 3ee4cdee6afc93b313f013ef35a2d4829244e463dceea9229c71e0d4c9d398051986978591d253129f83ec75c5417837d068c1408296faa6d5566a53a8683270
+ languageName: node
+ linkType: hard
+
"@opentelemetry/instrumentation-mongoose@npm:^0.37.0":
version: 0.37.0
resolution: "@opentelemetry/instrumentation-mongoose@npm:0.37.0"
@@ -14551,6 +14747,19 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/instrumentation-mysql2@npm:0.40.0":
+ version: 0.40.0
+ resolution: "@opentelemetry/instrumentation-mysql2@npm:0.40.0"
+ dependencies:
+ "@opentelemetry/instrumentation": ^0.52.0
+ "@opentelemetry/semantic-conventions": ^1.22.0
+ "@opentelemetry/sql-common": ^0.40.1
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: acdb9883d1ab92d0bfbe507736888cc0b0d7b25c3d24c27b51add17abceff4bf15988a3cd2e54b93256f28bbc65aa172f116df9277545143e20e8d7b497e2e63
+ languageName: node
+ linkType: hard
+
"@opentelemetry/instrumentation-mysql2@npm:^0.37.0":
version: 0.37.0
resolution: "@opentelemetry/instrumentation-mysql2@npm:0.37.0"
@@ -14564,6 +14773,19 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/instrumentation-mysql@npm:0.40.0":
+ version: 0.40.0
+ resolution: "@opentelemetry/instrumentation-mysql@npm:0.40.0"
+ dependencies:
+ "@opentelemetry/instrumentation": ^0.52.0
+ "@opentelemetry/semantic-conventions": ^1.22.0
+ "@types/mysql": 2.15.22
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 6eeba06f7507ab9086ef18b9e37802f12ac0a9f6182d4aba3aaf71a3e0f0759cb51c044247653eb8e359383d922a12a0fc0f129b2982bae17910462450cdb189
+ languageName: node
+ linkType: hard
+
"@opentelemetry/instrumentation-mysql@npm:^0.37.0":
version: 0.37.0
resolution: "@opentelemetry/instrumentation-mysql@npm:0.37.0"
@@ -14577,6 +14799,18 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/instrumentation-nestjs-core@npm:0.39.0":
+ version: 0.39.0
+ resolution: "@opentelemetry/instrumentation-nestjs-core@npm:0.39.0"
+ dependencies:
+ "@opentelemetry/instrumentation": ^0.52.0
+ "@opentelemetry/semantic-conventions": ^1.23.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 4394754ce3ef4747e39a59a602c744112f9d6d3ee7ef43a51f1562a977a8e2bb2944687d3dd199f0a5941517e71a84ff9ea9ce183d94b63a3311e9de6ac8e09c
+ languageName: node
+ linkType: hard
+
"@opentelemetry/instrumentation-nestjs-core@npm:^0.36.0":
version: 0.36.0
resolution: "@opentelemetry/instrumentation-nestjs-core@npm:0.36.0"
@@ -14601,6 +14835,21 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/instrumentation-pg@npm:0.43.0":
+ version: 0.43.0
+ resolution: "@opentelemetry/instrumentation-pg@npm:0.43.0"
+ dependencies:
+ "@opentelemetry/instrumentation": ^0.52.0
+ "@opentelemetry/semantic-conventions": ^1.22.0
+ "@opentelemetry/sql-common": ^0.40.1
+ "@types/pg": 8.6.1
+ "@types/pg-pool": 2.0.4
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: d255806b9e5ffd449b7ab3c7c072e919ad8a18118cdf5aec636d89a89d9ac63ef282f280d3b2dd7fa9c57e748fc0c9b38294911bf1aaff35e821079aaeacbd82
+ languageName: node
+ linkType: hard
+
"@opentelemetry/instrumentation-pg@npm:^0.40.0":
version: 0.40.0
resolution: "@opentelemetry/instrumentation-pg@npm:0.40.0"
@@ -14627,6 +14876,19 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/instrumentation-redis-4@npm:0.41.0":
+ version: 0.41.0
+ resolution: "@opentelemetry/instrumentation-redis-4@npm:0.41.0"
+ dependencies:
+ "@opentelemetry/instrumentation": ^0.52.0
+ "@opentelemetry/redis-common": ^0.36.2
+ "@opentelemetry/semantic-conventions": ^1.22.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 1809e3badea5ee5fff0d0a1e7a8204d4a6cf29e0e3b41677fba8eabb444cca62b88f815c5682bc5a827e3ff4ed2c186ed1965d0b2e0b9d1043130a410ee57b50
+ languageName: node
+ linkType: hard
+
"@opentelemetry/instrumentation-redis-4@npm:^0.38.0":
version: 0.38.0
resolution: "@opentelemetry/instrumentation-redis-4@npm:0.38.0"
@@ -14758,6 +15020,37 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/instrumentation@npm:0.52.1, @opentelemetry/instrumentation@npm:^0.49 || ^0.50 || ^0.51 || ^0.52.0, @opentelemetry/instrumentation@npm:^0.52.0, @opentelemetry/instrumentation@npm:^0.52.1":
+ version: 0.52.1
+ resolution: "@opentelemetry/instrumentation@npm:0.52.1"
+ dependencies:
+ "@opentelemetry/api-logs": 0.52.1
+ "@types/shimmer": ^1.0.2
+ import-in-the-middle: ^1.8.1
+ require-in-the-middle: ^7.1.1
+ semver: ^7.5.2
+ shimmer: ^1.2.1
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: e8b4f202dc9355ca46714349a5e1663346e162f79706eed38015edf38fc536330fde4cc19ed7d3d6b03258c890c1dc0ba6d658d7aac3f41f1803bd03699d2701
+ languageName: node
+ linkType: hard
+
+"@opentelemetry/instrumentation@npm:^0.46.0":
+ version: 0.46.0
+ resolution: "@opentelemetry/instrumentation@npm:0.46.0"
+ dependencies:
+ "@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
+ peerDependencies:
+ "@opentelemetry/api": ^1.3.0
+ checksum: 9589058da858eeb99b52ba191f93d82b3076b83f4a6cb745666fa742ce7fab8a219fd96a2f2bfad9609984d7462aedbaafa266a1ec3abca57964fdda0e43f5d6
+ languageName: node
+ linkType: hard
+
"@opentelemetry/otlp-exporter-base@npm:0.50.0":
version: 0.50.0
resolution: "@opentelemetry/otlp-exporter-base@npm:0.50.0"
@@ -14861,6 +15154,13 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/redis-common@npm:^0.36.2":
+ version: 0.36.2
+ resolution: "@opentelemetry/redis-common@npm:0.36.2"
+ checksum: b0a6f2c2dc64ba3b655ed944a5a33715d00365865e6f498005527a4ad6c40ca0e7b8ac531791b6d5abfbab9b22d9c6aa1cd8bcc851a7634dfb381ad2d5061b0d
+ languageName: node
+ linkType: hard
+
"@opentelemetry/resource-detector-alibaba-cloud@npm:^0.28.8":
version: 0.28.8
resolution: "@opentelemetry/resource-detector-alibaba-cloud@npm:0.28.8"
@@ -14948,6 +15248,18 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/resources@npm:1.26.0, @opentelemetry/resources@npm:^1.25.1":
+ version: 1.26.0
+ resolution: "@opentelemetry/resources@npm:1.26.0"
+ dependencies:
+ "@opentelemetry/core": 1.26.0
+ "@opentelemetry/semantic-conventions": 1.27.0
+ peerDependencies:
+ "@opentelemetry/api": ">=1.0.0 <1.10.0"
+ checksum: f70b0fdf4fb00c950bc30084818c92a5339f1be5d709bd681ab14453e877d6bb9f700324b8e65a0eabfeea618d01ed071abf9088e00fa0bf7f3305b1abad22cb
+ languageName: node
+ linkType: hard
+
"@opentelemetry/resources@npm:^1.0.0, @opentelemetry/resources@npm:^1.12.0":
version: 1.13.0
resolution: "@opentelemetry/resources@npm:1.13.0"
@@ -15060,6 +15372,19 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/sdk-trace-base@npm:^1.22, @opentelemetry/sdk-trace-base@npm:^1.25.1":
+ version: 1.26.0
+ resolution: "@opentelemetry/sdk-trace-base@npm:1.26.0"
+ dependencies:
+ "@opentelemetry/core": 1.26.0
+ "@opentelemetry/resources": 1.26.0
+ "@opentelemetry/semantic-conventions": 1.27.0
+ peerDependencies:
+ "@opentelemetry/api": ">=1.0.0 <1.10.0"
+ checksum: a4f4ddf644fd0d79b2bd49e4377143688d2aa657643a470d8bed6696f26817598fb4e9f16ba2d8c237292af56f06eec56594a7b4cc417d4ea7e490a45a22113b
+ languageName: node
+ linkType: hard
+
"@opentelemetry/sdk-trace-node@npm:1.23.0, @opentelemetry/sdk-trace-node@npm:^1.23.0":
version: 1.23.0
resolution: "@opentelemetry/sdk-trace-node@npm:1.23.0"
@@ -15130,6 +15455,20 @@ __metadata:
languageName: node
linkType: hard
+"@opentelemetry/semantic-conventions@npm:1.25.1":
+ version: 1.25.1
+ resolution: "@opentelemetry/semantic-conventions@npm:1.25.1"
+ checksum: fea418a4b09c55121c6da11c49dd2105116533838c484aead17e8acf8029dad711e145849812f9c61f9e48fad8e2b6cf103d2c18847ca993032ce9b27c2f863d
+ languageName: node
+ linkType: hard
+
+"@opentelemetry/semantic-conventions@npm:1.27.0, @opentelemetry/semantic-conventions@npm:^1.17.0, @opentelemetry/semantic-conventions@npm:^1.23.0, @opentelemetry/semantic-conventions@npm:^1.25.1":
+ version: 1.27.0
+ resolution: "@opentelemetry/semantic-conventions@npm:1.27.0"
+ checksum: 26d85f8d13c8c64024f7a84528cff41d56afc9829e7ff8a654576404f8b2c1a9c264adcc6fa5a9551bacdd938a4a464041fa9493e0a722e5605f2c2ae6752398
+ languageName: node
+ linkType: hard
+
"@opentelemetry/semantic-conventions@npm:1.7.0":
version: 1.7.0
resolution: "@opentelemetry/semantic-conventions@npm:1.7.0"
@@ -15169,6 +15508,17 @@ __metadata:
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": ^1.1.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.1.0
+ checksum: 23529740531937dee137c9680dbd2f7abf6a7d7340fbd48d309707601fa6255a5e8c2626c8e1c285b49c0b3429f2b3a8e6cbf7f7240820ecfeb52e2ba5ed6740
+ languageName: node
+ linkType: hard
+
"@panva/hkdf@npm:^1.1.1":
version: 1.1.1
resolution: "@panva/hkdf@npm:1.1.1"
@@ -15491,6 +15841,17 @@ __metadata:
languageName: node
linkType: hard
+"@prisma/instrumentation@npm:5.18.0":
+ version: 5.18.0
+ resolution: "@prisma/instrumentation@npm:5.18.0"
+ dependencies:
+ "@opentelemetry/api": ^1.8
+ "@opentelemetry/instrumentation": ^0.49 || ^0.50 || ^0.51 || ^0.52.0
+ "@opentelemetry/sdk-trace-base": ^1.22
+ checksum: a61892e7e5ed501002947bbccc1a275d52ac42f13a69a3192c1ceef086014e45cb9cac1787f8d589556e8c48cb5d7d3a355b3710c9094d62b276147b3527c411
+ languageName: node
+ linkType: hard
+
"@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2":
version: 1.1.2
resolution: "@protobufjs/aspromise@npm:1.1.2"
@@ -16749,6 +17110,25 @@ __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": ^5.0.1
+ commondir: ^1.0.1
+ estree-walker: ^2.0.2
+ glob: ^10.4.1
+ is-reference: 1.2.1
+ magic-string: ^0.30.3
+ peerDependencies:
+ rollup: ^2.68.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+ checksum: 88d1349cc2cda4ad6193cce901356e4c14a830497fc01c91f38c94a871b203ffe657b29c9a98cd16787e3a6a8b45169dd0b471cb36d26d645478a177c958779a
+ languageName: node
+ linkType: hard
+
"@rollup/plugin-node-resolve@npm:^11.2.1":
version: 11.2.1
resolution: "@rollup/plugin-node-resolve@npm:11.2.1"
@@ -16855,6 +17235,17 @@ __metadata:
languageName: node
linkType: hard
+"@sentry-internal/browser-utils@npm:8.28.0":
+ version: 8.28.0
+ resolution: "@sentry-internal/browser-utils@npm:8.28.0"
+ dependencies:
+ "@sentry/core": 8.28.0
+ "@sentry/types": 8.28.0
+ "@sentry/utils": 8.28.0
+ checksum: 33cb061158204781cfea9a5d2ea1af3c38ebc06bbd6c8ffbacfea564de4ba8adc2d47d70bc51f0cba7b1135ce5e6846ff63b2a601ce314ae4e49a5c8c5b7fb8a
+ languageName: node
+ linkType: hard
+
"@sentry-internal/feedback@npm:7.113.0":
version: 7.113.0
resolution: "@sentry-internal/feedback@npm:7.113.0"
@@ -16866,6 +17257,17 @@ __metadata:
languageName: node
linkType: hard
+"@sentry-internal/feedback@npm:8.28.0":
+ version: 8.28.0
+ resolution: "@sentry-internal/feedback@npm:8.28.0"
+ dependencies:
+ "@sentry/core": 8.28.0
+ "@sentry/types": 8.28.0
+ "@sentry/utils": 8.28.0
+ checksum: e767624ef5b94037ec6457fabf23f105eb6fc945665edcd7dc1fd0a139ad93ccc3aafc0406fdb5a6d37ef6b6209423dfbab4ba288da362a69fc60aa7fbd62cb8
+ languageName: node
+ linkType: hard
+
"@sentry-internal/replay-canvas@npm:7.113.0":
version: 7.113.0
resolution: "@sentry-internal/replay-canvas@npm:7.113.0"
@@ -16878,6 +17280,30 @@ __metadata:
languageName: node
linkType: hard
+"@sentry-internal/replay-canvas@npm:8.28.0":
+ version: 8.28.0
+ resolution: "@sentry-internal/replay-canvas@npm:8.28.0"
+ dependencies:
+ "@sentry-internal/replay": 8.28.0
+ "@sentry/core": 8.28.0
+ "@sentry/types": 8.28.0
+ "@sentry/utils": 8.28.0
+ checksum: a652a9427c0de7d6b406bdc0af299e92d556feb60f867707f49e46083c82afa6938e900c598c5dcdf5153d5382f3a05ca6537fd8448f10ca8a084b54bdafa614
+ languageName: node
+ linkType: hard
+
+"@sentry-internal/replay@npm:8.28.0":
+ version: 8.28.0
+ resolution: "@sentry-internal/replay@npm:8.28.0"
+ dependencies:
+ "@sentry-internal/browser-utils": 8.28.0
+ "@sentry/core": 8.28.0
+ "@sentry/types": 8.28.0
+ "@sentry/utils": 8.28.0
+ checksum: 02833baf0ef4e6c1970cfb22679f2604b6f98f2ff58cd0e98620156ada41446ffd16a5b81208ddce4f941180161bc9826364038227bd2b010d565a7af3fbf535
+ languageName: node
+ linkType: hard
+
"@sentry-internal/tracing@npm:7.113.0":
version: 7.113.0
resolution: "@sentry-internal/tracing@npm:7.113.0"
@@ -16889,6 +17315,28 @@ __metadata:
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: 8dccbe700ffdd4cbdbcf2466d342fba40b3619aef06aa855205a9fa09707a92e80cb401cd341bed1ebe77d28b96fd11a06a6e78ba12b8045b52201f89cb6eced
+ languageName: node
+ linkType: hard
+
+"@sentry/browser@npm:8.28.0":
+ version: 8.28.0
+ resolution: "@sentry/browser@npm:8.28.0"
+ dependencies:
+ "@sentry-internal/browser-utils": 8.28.0
+ "@sentry-internal/feedback": 8.28.0
+ "@sentry-internal/replay": 8.28.0
+ "@sentry-internal/replay-canvas": 8.28.0
+ "@sentry/core": 8.28.0
+ "@sentry/types": 8.28.0
+ "@sentry/utils": 8.28.0
+ checksum: 712e05b178624dec7f0c6d981a7065ee0f0034b293ac22a4f0b9e1ea63656463f9505473e9953eba1e64409db7aa7105a64b5726e14560b7e0f1197a2fd4e46b
+ languageName: node
+ linkType: hard
+
"@sentry/browser@npm:^7.113.0":
version: 7.113.0
resolution: "@sentry/browser@npm:7.113.0"
@@ -16905,6 +17353,108 @@ __metadata:
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": ^7.18.5
+ "@sentry/babel-plugin-component-annotate": 2.22.3
+ "@sentry/cli": ^2.33.1
+ dotenv: ^16.3.1
+ find-up: ^5.0.0
+ glob: ^9.3.2
+ magic-string: 0.30.8
+ unplugin: 1.0.1
+ checksum: cbf7befb78ecf2c1cd0af9b22c26acb7da63c030309452172a34146e834c644dcd24538eedfa6e4296c51bbf46fd1ab50c2b2f108d26c16d8169b7eb29f1e53c
+ languageName: node
+ linkType: hard
+
+"@sentry/cli-darwin@npm:2.35.0":
+ version: 2.35.0
+ resolution: "@sentry/cli-darwin@npm:2.35.0"
+ conditions: os=darwin
+ languageName: node
+ linkType: hard
+
+"@sentry/cli-linux-arm64@npm:2.35.0":
+ version: 2.35.0
+ resolution: "@sentry/cli-linux-arm64@npm:2.35.0"
+ conditions: (os=linux | os=freebsd) & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@sentry/cli-linux-arm@npm:2.35.0":
+ version: 2.35.0
+ resolution: "@sentry/cli-linux-arm@npm:2.35.0"
+ conditions: (os=linux | os=freebsd) & cpu=arm
+ languageName: node
+ linkType: hard
+
+"@sentry/cli-linux-i686@npm:2.35.0":
+ version: 2.35.0
+ resolution: "@sentry/cli-linux-i686@npm:2.35.0"
+ conditions: (os=linux | os=freebsd) & (cpu=x86 | cpu=ia32)
+ languageName: node
+ linkType: hard
+
+"@sentry/cli-linux-x64@npm:2.35.0":
+ version: 2.35.0
+ resolution: "@sentry/cli-linux-x64@npm:2.35.0"
+ conditions: (os=linux | os=freebsd) & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@sentry/cli-win32-i686@npm:2.35.0":
+ version: 2.35.0
+ resolution: "@sentry/cli-win32-i686@npm:2.35.0"
+ conditions: os=win32 & (cpu=x86 | cpu=ia32)
+ languageName: node
+ linkType: hard
+
+"@sentry/cli-win32-x64@npm:2.35.0":
+ version: 2.35.0
+ resolution: "@sentry/cli-win32-x64@npm:2.35.0"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@sentry/cli@npm:^2.33.1":
+ version: 2.35.0
+ resolution: "@sentry/cli@npm:2.35.0"
+ dependencies:
+ "@sentry/cli-darwin": 2.35.0
+ "@sentry/cli-linux-arm": 2.35.0
+ "@sentry/cli-linux-arm64": 2.35.0
+ "@sentry/cli-linux-i686": 2.35.0
+ "@sentry/cli-linux-x64": 2.35.0
+ "@sentry/cli-win32-i686": 2.35.0
+ "@sentry/cli-win32-x64": 2.35.0
+ https-proxy-agent: ^5.0.0
+ node-fetch: ^2.6.7
+ progress: ^2.0.3
+ proxy-from-env: ^1.1.0
+ which: ^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: 15e76ad1cb53cc46823aa48ea99844cd9a944d33c2667cbecf1260b564428a7ef47c1ca38e9a9e222e4d697ed7e5892b107a0b00eddc9e740add290cbe0ad1eb
+ languageName: node
+ linkType: hard
+
"@sentry/core@npm:7.113.0":
version: 7.113.0
resolution: "@sentry/core@npm:7.113.0"
@@ -16915,6 +17465,16 @@ __metadata:
languageName: node
linkType: hard
+"@sentry/core@npm:8.28.0":
+ version: 8.28.0
+ resolution: "@sentry/core@npm:8.28.0"
+ dependencies:
+ "@sentry/types": 8.28.0
+ "@sentry/utils": 8.28.0
+ checksum: 2a37f14b36a68c496050054f952d56e639863257f59ffcccb7aed4b1a35fb063c1ced38a08e89f2bb789124b18b7f955fd78ef8b38408ad91853aa1a5aa51cbb
+ languageName: node
+ linkType: hard
+
"@sentry/integrations@npm:7.113.0, @sentry/integrations@npm:^7.113.0":
version: 7.113.0
resolution: "@sentry/integrations@npm:7.113.0"
@@ -16927,6 +17487,76 @@ __metadata:
languageName: node
linkType: hard
+"@sentry/nextjs@npm:^8":
+ version: 8.28.0
+ resolution: "@sentry/nextjs@npm:8.28.0"
+ dependencies:
+ "@opentelemetry/instrumentation-http": 0.52.1
+ "@opentelemetry/semantic-conventions": ^1.25.1
+ "@rollup/plugin-commonjs": 26.0.1
+ "@sentry/core": 8.28.0
+ "@sentry/node": 8.28.0
+ "@sentry/opentelemetry": 8.28.0
+ "@sentry/react": 8.28.0
+ "@sentry/types": 8.28.0
+ "@sentry/utils": 8.28.0
+ "@sentry/vercel-edge": 8.28.0
+ "@sentry/webpack-plugin": 2.22.3
+ chalk: 3.0.0
+ resolve: 1.22.8
+ rollup: 3.29.4
+ stacktrace-parser: ^0.1.10
+ peerDependencies:
+ next: ^13.2.0 || ^14.0 || ^15.0.0-rc.0
+ webpack: ">= 5.0.0"
+ peerDependenciesMeta:
+ webpack:
+ optional: true
+ checksum: 5f2ad54789e9eea667fc42bc7c99253cd4ffe6545a878c03e9d977625fe5bb70e1ce09634e308d510182591726a6e6d749e84362c067ed2e5b984bf71034edc8
+ languageName: node
+ linkType: hard
+
+"@sentry/node@npm:8.28.0":
+ version: 8.28.0
+ resolution: "@sentry/node@npm:8.28.0"
+ dependencies:
+ "@opentelemetry/api": ^1.9.0
+ "@opentelemetry/context-async-hooks": ^1.25.1
+ "@opentelemetry/core": ^1.25.1
+ "@opentelemetry/instrumentation": ^0.52.1
+ "@opentelemetry/instrumentation-connect": 0.38.0
+ "@opentelemetry/instrumentation-express": 0.41.1
+ "@opentelemetry/instrumentation-fastify": 0.38.0
+ "@opentelemetry/instrumentation-fs": 0.14.0
+ "@opentelemetry/instrumentation-graphql": 0.42.0
+ "@opentelemetry/instrumentation-hapi": 0.40.0
+ "@opentelemetry/instrumentation-http": 0.52.1
+ "@opentelemetry/instrumentation-ioredis": 0.42.0
+ "@opentelemetry/instrumentation-koa": 0.42.0
+ "@opentelemetry/instrumentation-mongodb": 0.46.0
+ "@opentelemetry/instrumentation-mongoose": 0.40.0
+ "@opentelemetry/instrumentation-mysql": 0.40.0
+ "@opentelemetry/instrumentation-mysql2": 0.40.0
+ "@opentelemetry/instrumentation-nestjs-core": 0.39.0
+ "@opentelemetry/instrumentation-pg": 0.43.0
+ "@opentelemetry/instrumentation-redis-4": 0.41.0
+ "@opentelemetry/resources": ^1.25.1
+ "@opentelemetry/sdk-trace-base": ^1.25.1
+ "@opentelemetry/semantic-conventions": ^1.25.1
+ "@prisma/instrumentation": 5.18.0
+ "@sentry/core": 8.28.0
+ "@sentry/opentelemetry": 8.28.0
+ "@sentry/types": 8.28.0
+ "@sentry/utils": 8.28.0
+ import-in-the-middle: ^1.11.0
+ opentelemetry-instrumentation-fetch-node: 1.2.3
+ dependenciesMeta:
+ opentelemetry-instrumentation-fetch-node:
+ optional: true
+ checksum: 795d81e9257070c9557e79f1b22ba0d042ab5320766860a83e5adf76f0e6b57352b73ccd194a36732da680d5f6ebb041ead435b81bdda676137371cc73ba0723
+ languageName: node
+ linkType: hard
+
"@sentry/node@npm:^7.113.0":
version: 7.113.0
resolution: "@sentry/node@npm:7.113.0"
@@ -16956,6 +17586,38 @@ __metadata:
languageName: node
linkType: hard
+"@sentry/opentelemetry@npm:8.28.0":
+ version: 8.28.0
+ resolution: "@sentry/opentelemetry@npm:8.28.0"
+ dependencies:
+ "@sentry/core": 8.28.0
+ "@sentry/types": 8.28.0
+ "@sentry/utils": 8.28.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.9.0
+ "@opentelemetry/core": ^1.25.1
+ "@opentelemetry/instrumentation": ^0.52.1
+ "@opentelemetry/sdk-trace-base": ^1.25.1
+ "@opentelemetry/semantic-conventions": ^1.25.1
+ checksum: 68421a9df72a9b9203447cbf34ddad74b7bb845d3bbb296e607eb2cddf164deb6ecefa0a78d1ccd324ffdb491df3f6f7a63167c602b22aeef33c9c9f78f7c03c
+ languageName: node
+ linkType: hard
+
+"@sentry/react@npm:8.28.0":
+ version: 8.28.0
+ resolution: "@sentry/react@npm:8.28.0"
+ dependencies:
+ "@sentry/browser": 8.28.0
+ "@sentry/core": 8.28.0
+ "@sentry/types": 8.28.0
+ "@sentry/utils": 8.28.0
+ hoist-non-react-statics: ^3.3.2
+ peerDependencies:
+ react: ^16.14.0 || 17.x || 18.x || 19.x
+ checksum: f3c16345aeaa6699fb2ef0dbe9ef2c46cec651740743d69a297093da1ebe6239a65e8a406f60c6841a43e74c21932c5bb055fda0443d469fc1ae2a57a9f5c607
+ languageName: node
+ linkType: hard
+
"@sentry/replay@npm:7.113.0":
version: 7.113.0
resolution: "@sentry/replay@npm:7.113.0"
@@ -16968,10 +17630,10 @@ __metadata:
languageName: node
linkType: hard
-"@sentry/types@npm:7.113.0":
- version: 7.113.0
- resolution: "@sentry/types@npm:7.113.0"
- checksum: 6131e776c274d02b54a261739850bd9f5db100f2616a79aed20e6e3523dc251445006287d5ada4cc50f752ff161e70682e9572b86caeab23e92a0ad6d0495802
+"@sentry/types@npm:^7.113.0":
+ version: 7.119.0
+ resolution: "@sentry/types@npm:7.119.0"
+ checksum: ffb8dcaf1d5c96defe860e663553511e602cd6bfbe63b0c3fd8cba5ec1c3ea9ad47597527f4d9ef314ba1b11bccf89c4d6f50435df7cbfb92f5a398c6c261f0b
languageName: node
linkType: hard
@@ -16984,6 +17646,39 @@ __metadata:
languageName: node
linkType: hard
+"@sentry/utils@npm:8.28.0":
+ version: 8.28.0
+ resolution: "@sentry/utils@npm:8.28.0"
+ dependencies:
+ "@sentry/types": 8.28.0
+ checksum: e0e70a2076e5ca0110865ec89a84f683531da222cf3fd85020d392da2e8b160fc103066576e21f75039751db9178aacf83be44e6930a9e38c927e279e147ea18
+ languageName: node
+ linkType: hard
+
+"@sentry/vercel-edge@npm:8.28.0":
+ version: 8.28.0
+ resolution: "@sentry/vercel-edge@npm:8.28.0"
+ dependencies:
+ "@sentry/core": 8.28.0
+ "@sentry/types": 8.28.0
+ "@sentry/utils": 8.28.0
+ checksum: 68e5e75bb573863c6ebf9cf0a387531a8557f62cd43d55fc29356693e3b135670f64a0875de73eb4d0c7de2a8f66cbba5b3e928c1a0a761a830c6e3f8d26faee
+ 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": 2.22.3
+ unplugin: 1.0.1
+ uuid: ^9.0.0
+ peerDependencies:
+ webpack: ">=4.40.0"
+ checksum: f6eb12337e35d6514b750acf6bee75227fec7da142a62b660a864e48a3ece6b7d7e96dc8a3c126ebb650ea8acaa6b423399a31a6f48e59e51708965745d3a3f4
+ languageName: node
+ linkType: hard
+
"@sideway/address@npm:^4.1.3":
version: 4.1.3
resolution: "@sideway/address@npm:4.1.3"
@@ -34503,7 +35198,7 @@ __metadata:
languageName: node
linkType: hard
-"dotenv@npm:^16.4.4, dotenv@npm:^16.4.5, dotenv@npm:~16.4.5":
+"dotenv@npm:^16.3.1, dotenv@npm:^16.4.4, dotenv@npm:^16.4.5, dotenv@npm:~16.4.5":
version: 16.4.5
resolution: "dotenv@npm:16.4.5"
checksum: 301a12c3d44fd49888b74eb9ccf9f07a1f5df43f489e7fcb89647a2edcd84c42d6bc349dc8df099cd18f07c35c7b04685c1a4f3e6a6a9e6b30f8d48c15b7f49c
@@ -40105,6 +40800,7 @@ fsevents@~2.1.1:
"@radix-ui/react-tooltip": ^1.1.2
"@sentry/browser": ^7.113.0
"@sentry/integrations": ^7.113.0
+ "@sentry/nextjs": ^8
"@sentry/node": ^7.113.0
"@sentry/opentelemetry-node": ^7.113.0
"@storybook/addon-essentials": ^7.6.15
@@ -40788,6 +41484,22 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
+"glob@npm:^10.4.1":
+ version: 10.4.5
+ resolution: "glob@npm:10.4.5"
+ dependencies:
+ foreground-child: ^3.1.0
+ jackspeak: ^3.1.2
+ minimatch: ^9.0.4
+ minipass: ^7.1.2
+ package-json-from-dist: ^1.0.0
+ path-scurry: ^1.11.1
+ bin:
+ glob: dist/esm/bin.mjs
+ checksum: 0bc725de5e4862f9f387fd0f2b274baf16850dcd2714502ccf471ee401803997983e2c05590cb65f9675a3c6f2a58e7a53f9e365704108c6ad3cbf1d60934c4a
+ languageName: node
+ linkType: hard
+
"glob@npm:^5.0.15, glob@npm:^5.0.3":
version: 5.0.15
resolution: "glob@npm:5.0.15"
@@ -40855,6 +41567,18 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
+"glob@npm:^9.3.2":
+ version: 9.3.5
+ resolution: "glob@npm:9.3.5"
+ dependencies:
+ fs.realpath: ^1.0.0
+ minimatch: ^8.0.2
+ minipass: ^4.2.4
+ path-scurry: ^1.6.1
+ checksum: 94b093adbc591bc36b582f77927d1fb0dbf3ccc231828512b017601408be98d1fe798fc8c0b19c6f2d1a7660339c3502ce698de475e9d938ccbb69b47b647c84
+ languageName: node
+ linkType: hard
+
"glob@npm:~7.1.1, glob@npm:~7.1.6, glob@npm:~7.1.7":
version: 7.1.7
resolution: "glob@npm:7.1.7"
@@ -43383,6 +44107,18 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
+"import-in-the-middle@npm:^1.11.0, import-in-the-middle@npm:^1.8.1":
+ version: 1.11.0
+ resolution: "import-in-the-middle@npm:1.11.0"
+ dependencies:
+ acorn: ^8.8.2
+ acorn-import-attributes: ^1.9.5
+ cjs-module-lexer: ^1.2.2
+ module-details-from-path: ^1.0.3
+ checksum: 7e7c47e363be9579a4269e1df803be29cd3feb1df2c490b7cdef7c3a7c20f1f5cfa62d7f8de934b73e5c0e98ff07e1f0147b9fc11789a0f160d2893ddcc035ab
+ languageName: node
+ linkType: hard
+
"import-local@npm:^3.0.2":
version: 3.0.2
resolution: "import-local@npm:3.0.2"
@@ -44609,6 +45345,15 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
+"is-reference@npm:1.2.1":
+ version: 1.2.1
+ resolution: "is-reference@npm:1.2.1"
+ dependencies:
+ "@types/estree": "*"
+ checksum: e7b48149f8abda2c10849ea51965904d6a714193d68942ad74e30522231045acf06cbfae5a4be2702fede5d232e61bf50b3183acdc056e6e3afe07fcf4f4b2bc
+ languageName: node
+ linkType: hard
+
"is-regex@npm:^1.0.3, is-regex@npm:^1.1.2, is-regex@npm:^1.1.4":
version: 1.1.4
resolution: "is-regex@npm:1.1.4"
@@ -49544,6 +50289,15 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
+"magic-string@npm:^0.30.3":
+ version: 0.30.11
+ resolution: "magic-string@npm:0.30.11"
+ dependencies:
+ "@jridgewell/sourcemap-codec": ^1.5.0
+ checksum: e041649453c9a3f31d2e731fc10e38604d50e20d3585cd48bc7713a6e2e1a3ad3012105929ca15750d59d0a3f1904405e4b95a23b7e69dc256db3c277a73a3ca
+ languageName: node
+ linkType: hard
+
"magic-string@npm:^0.30.5":
version: 0.30.7
resolution: "magic-string@npm:0.30.7"
@@ -50603,6 +51357,15 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
+"minimatch@npm:^8.0.2":
+ version: 8.0.4
+ resolution: "minimatch@npm:8.0.4"
+ dependencies:
+ brace-expansion: ^2.0.1
+ checksum: 2e46cffb86bacbc524ad45a6426f338920c529dd13f3a732cc2cf7618988ee1aae88df4ca28983285aca9e0f45222019ac2d14ebd17c1edadd2ee12221ab801a
+ languageName: node
+ linkType: hard
+
"minimatch@npm:^9.0.0":
version: 9.0.0
resolution: "minimatch@npm:9.0.0"
@@ -50742,6 +51505,13 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
+"minipass@npm:^4.2.4":
+ version: 4.2.8
+ resolution: "minipass@npm:4.2.8"
+ checksum: 7f4914d5295a9a30807cae5227a37a926e6d910c03f315930fde52332cf0575dfbc20295318f91f0baf0e6bb11a6f668e30cde8027dea7a11b9d159867a3c830
+ languageName: node
+ linkType: hard
+
"minipass@npm:^5.0.0":
version: 5.0.0
resolution: "minipass@npm:5.0.0"
@@ -53523,6 +54293,18 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
+"opentelemetry-instrumentation-fetch-node@npm:1.2.3":
+ version: 1.2.3
+ resolution: "opentelemetry-instrumentation-fetch-node@npm:1.2.3"
+ dependencies:
+ "@opentelemetry/instrumentation": ^0.46.0
+ "@opentelemetry/semantic-conventions": ^1.17.0
+ peerDependencies:
+ "@opentelemetry/api": ^1.6.0
+ checksum: 1249388c22c5942572895031c7adb355b9563685cc9f773f617a524ca0033f62ad4c904001088a53c433998ca68ce44fe17ed04f04179374f56a5d6b610a9c83
+ languageName: node
+ linkType: hard
+
"opentracing@npm:^0.14.4":
version: 0.14.7
resolution: "opentracing@npm:0.14.7"
@@ -54430,7 +55212,7 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
-"path-scurry@npm:^1.11.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:
@@ -57052,7 +57834,7 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
-"progress@npm:^2.0.0, progress@npm:^2.0.1":
+"progress@npm:^2.0.0, progress@npm:^2.0.1, progress@npm:^2.0.3":
version: 2.0.3
resolution: "progress@npm:2.0.3"
checksum: f67403fe7b34912148d9252cb7481266a354bd99ce82c835f79070643bb3c6583d10dbcfda4d41e04bbc1d8437e9af0fb1e1f2135727878f5308682a579429b7
@@ -59977,6 +60759,20 @@ resolve@1.1.7:
languageName: node
linkType: hard
+"rollup@npm:3.29.4":
+ version: 3.29.4
+ resolution: "rollup@npm:3.29.4"
+ dependencies:
+ fsevents: ~2.3.2
+ dependenciesMeta:
+ fsevents:
+ optional: true
+ bin:
+ rollup: dist/bin/rollup
+ checksum: 8bb20a39c8d91130825159c3823eccf4dc2295c9a0a5c4ed851a5bf2167dbf24d9a29f23461a54c955e5506395e6cc188eafc8ab0e20399d7489fb33793b184e
+ languageName: node
+ linkType: hard
+
"rollup@npm:^2.43.1":
version: 2.79.1
resolution: "rollup@npm:2.79.1"
@@ -62169,6 +62965,15 @@ resolve@1.1.7:
languageName: node
linkType: hard
+"stacktrace-parser@npm:^0.1.10":
+ version: 0.1.10
+ resolution: "stacktrace-parser@npm:0.1.10"
+ dependencies:
+ type-fest: ^0.7.1
+ checksum: f4fbddfc09121d91e587b60de4beb4941108e967d71ad3a171812dc839b010ca374d064ad0a296295fed13acd103609d99a4224a25b4e67de13cae131f1901ee
+ languageName: node
+ linkType: hard
+
"standard-as-callback@npm:^2.1.0":
version: 2.1.0
resolution: "standard-as-callback@npm:2.1.0"
@@ -65340,6 +66145,13 @@ resolve@1.1.7:
languageName: node
linkType: hard
+"type-fest@npm:^0.7.1":
+ version: 0.7.1
+ resolution: "type-fest@npm:0.7.1"
+ checksum: 5b1b113529d59949d97b76977d545989ddc11b81bb0c766b6d2ccc65473cb4b4a5c7d24f5be2c2bb2de302a5d7a13c1732ea1d34c8c59b7e0ec1f890cf7fc424
+ languageName: node
+ linkType: hard
+
"type-fest@npm:^0.8.0, type-fest@npm:^0.8.1":
version: 0.8.1
resolution: "type-fest@npm:0.8.1"
@@ -65999,6 +66811,18 @@ resolve@1.1.7:
languageName: node
linkType: hard
+"unplugin@npm:1.0.1":
+ version: 1.0.1
+ resolution: "unplugin@npm:1.0.1"
+ dependencies:
+ acorn: ^8.8.1
+ chokidar: ^3.5.3
+ webpack-sources: ^3.2.3
+ webpack-virtual-modules: ^0.5.0
+ checksum: b6bf00dcc79e71cd55d2b4dd39ec7c8ec40b071dc10c14e29095df5dccb13ad0ca1cf14e5da38bb16b8704f8eface750b7a3be9ee7ca2574ce31096ee966b356
+ languageName: node
+ linkType: hard
+
"unplugin@npm:^1.3.1":
version: 1.5.1
resolution: "unplugin@npm:1.5.1"