From 52cbf55763fa51bcf3497d3b760eed87ca515b7d Mon Sep 17 00:00:00 2001
From: MaheshtheDev <38828053+MaheshtheDev@users.noreply.github.com>
Date: Thu, 21 Aug 2025 19:46:41 +0000
Subject: [PATCH] feat: sentry integration (#376)
---
apps/web/.gitignore | 3 ++
apps/web/app/global-error.tsx | 23 +++++++++
apps/web/instrumentation-client.ts | 28 +++++++----
apps/web/instrumentation.ts | 13 +++++
apps/web/next.config.ts | 78 +++++++++++++++--------------
apps/web/package.json | 2 +-
apps/web/sentry.edge.config.ts | 19 +++++++
apps/web/sentry.server.config.ts | 18 +++++++
bun.lockb | Bin 699608 -> 694040 bytes
9 files changed, 134 insertions(+), 50 deletions(-)
create mode 100644 apps/web/app/global-error.tsx
create mode 100644 apps/web/instrumentation.ts
create mode 100644 apps/web/sentry.edge.config.ts
create mode 100644 apps/web/sentry.server.config.ts
diff --git a/apps/web/.gitignore b/apps/web/.gitignore
index 4f328319..c740f883 100644
--- a/apps/web/.gitignore
+++ b/apps/web/.gitignore
@@ -35,3 +35,6 @@ yarn-error.log*
# typescript
*.tsbuildinfo
next-env.d.ts
+
+# Sentry Config File
+.env.sentry-build-plugin
diff --git a/apps/web/app/global-error.tsx b/apps/web/app/global-error.tsx
new file mode 100644
index 00000000..9bda5fee
--- /dev/null
+++ b/apps/web/app/global-error.tsx
@@ -0,0 +1,23 @@
+"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. */}
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/apps/web/instrumentation-client.ts b/apps/web/instrumentation-client.ts
index d348b544..2c9c9e2d 100644
--- a/apps/web/instrumentation-client.ts
+++ b/apps/web/instrumentation-client.ts
@@ -2,23 +2,29 @@
// The added config 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 * as Sentry from '@sentry/nextjs';
Sentry.init({
- _experiments: {
- enableLogs: true,
- },
+ dsn: 'https://2451ebfd1a7490f05fa7776482df81b6@o4508385422802944.ingest.us.sentry.io/4509872269819904',
- enabled: process.env.NODE_ENV === "production",
+ // Add optional integrations for additional features
+ integrations: [Sentry.replayIntegration()],
- // Setting this option to true will print useful information to the console while you're setting up Sentry.
- debug: false,
- dsn: "https://a12ac22517d938dc69f9c5ad67bf8e2d@o4508385422802944.ingest.us.sentry.io/4509454536998913",
+ // Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control.
+ tracesSampleRate: 1,
+ // Enable logs to be sent to Sentry
+ enableLogs: true,
- integrations: [Sentry.consoleLoggingIntegration()],
+ // 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,
- // Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control.
- tracesSampleRate: 1,
+ // Define how likely Replay events are sampled when an error occurs.
+ replaysOnErrorSampleRate: 1.0,
+
+ // Setting this option to true will print useful information to the console while you're setting up Sentry.
+ debug: false,
});
export const onRouterTransitionStart = Sentry.captureRouterTransitionStart;
diff --git a/apps/web/instrumentation.ts b/apps/web/instrumentation.ts
new file mode 100644
index 00000000..964f937c
--- /dev/null
+++ b/apps/web/instrumentation.ts
@@ -0,0 +1,13 @@
+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/apps/web/next.config.ts b/apps/web/next.config.ts
index 6a92e72c..a6ee01f3 100644
--- a/apps/web/next.config.ts
+++ b/apps/web/next.config.ts
@@ -2,60 +2,62 @@ import { withSentryConfig } from "@sentry/nextjs";
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
- experimental: {
- reactCompiler: true,
- viewTransition: true,
- },
- eslint: {
- ignoreDuringBuilds: true,
- },
- poweredByHeader: false,
- async rewrites() {
- return [
- {
- source: "/ingest/static/:path*",
- destination: "https://us-assets.i.posthog.com/static/:path*",
- },
- {
- source: "/ingest/:path*",
- destination: "https://us.i.posthog.com/:path*",
- },
- ];
- },
- skipTrailingSlashRedirect: true,
+ experimental: {
+ reactCompiler: true,
+ viewTransition: true,
+ },
+ eslint: {
+ ignoreDuringBuilds: true,
+ },
+ poweredByHeader: false,
+ async rewrites() {
+ return [
+ {
+ source: "/ingest/static/:path*",
+ destination: "https://us-assets.i.posthog.com/static/:path*",
+ },
+ {
+ source: "/ingest/:path*",
+ destination: "https://us.i.posthog.com/:path*",
+ },
+ ];
+ },
+ skipTrailingSlashRedirect: true,
};
export default withSentryConfig(nextConfig, {
- // 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,
-
- // Automatically tree-shake Sentry logger statements to reduce bundle size
- disableLogger: true,
- // For all available options, see:
+ // For all available options, see:
// https://www.npmjs.com/package/@sentry/webpack-plugin#options
org: "supermemory",
- project: "consumer",
- // Only print logs for uploading source maps in CI
+ project: "consumer-app",
+
+ // Only print logs for uploading source maps in CI
silent: !process.env.CI,
- // Route browser requests to Sentry through a Next.js rewrite to circumvent ad-blockers.
+ // 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,
+
+ // 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",
- // For all available options, see:
- // https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/
+ // Automatically tree-shake Sentry logger statements to reduce bundle size
+ disableLogger: true,
- // Upload a larger set of source maps for prettier stack traces (increases build time)
- widenClientFileUpload: 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,
});
import { initOpenNextCloudflareForDev } from "@opennextjs/cloudflare";
-initOpenNextCloudflareForDev();
+initOpenNextCloudflareForDev();
\ No newline at end of file
diff --git a/apps/web/package.json b/apps/web/package.json
index 47f2bff8..546dd9f3 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -39,7 +39,7 @@
"@react-router/fs-routes": "^7.6.2",
"@react-router/node": "^7.6.2",
"@react-router/serve": "^7.6.2",
- "@sentry/nextjs": "^9.33.0",
+ "@sentry/nextjs": "^10",
"@tabler/icons-react": "^3.34.0",
"@tailwindcss/typography": "^0.5.16",
"@tanstack/react-form": "^1.12.4",
diff --git a/apps/web/sentry.edge.config.ts b/apps/web/sentry.edge.config.ts
new file mode 100644
index 00000000..cff5a86d
--- /dev/null
+++ b/apps/web/sentry.edge.config.ts
@@ -0,0 +1,19 @@
+// 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: "https://2451ebfd1a7490f05fa7776482df81b6@o4508385422802944.ingest.us.sentry.io/4509872269819904",
+
+ // Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control.
+ tracesSampleRate: 1,
+
+ // Enable logs to be sent to Sentry
+ enableLogs: true,
+
+ // Setting this option to true will print useful information to the console while you're setting up Sentry.
+ debug: false,
+});
diff --git a/apps/web/sentry.server.config.ts b/apps/web/sentry.server.config.ts
new file mode 100644
index 00000000..2cd5afbe
--- /dev/null
+++ b/apps/web/sentry.server.config.ts
@@ -0,0 +1,18 @@
+// 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: "https://2451ebfd1a7490f05fa7776482df81b6@o4508385422802944.ingest.us.sentry.io/4509872269819904",
+
+ // Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control.
+ tracesSampleRate: 1,
+
+ // Enable logs to be sent to Sentry
+ enableLogs: true,
+
+ // Setting this option to true will print useful information to the console while you're setting up Sentry.
+ debug: false,
+});
diff --git a/bun.lockb b/bun.lockb
index 2143da85022b1c3f022523c5580707a1f22afdc4..0a1edefa5067692005605f9739d09129a6b62d62 100755
GIT binary patch
delta 136878
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
eE!t4?*@-ubU*Fp
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