diff --git a/.env.example b/.env.example index 91009bbe..14c3169c 100644 --- a/.env.example +++ b/.env.example @@ -17,9 +17,3 @@ UPSTASH_REDIS_REST_TOKEN= # Resend RESEND_API_KEY= - -# Sentry -NEXT_PUBLIC_SENTRY_DSN= -SENTRY_ORG= -SENTRY_PROJECT= -SENTRY_AUTH_TOKEN= \ No newline at end of file diff --git a/.github/workflows/main-ci.yml b/.github/workflows/main-ci.yml index b68fd36d..d05cddac 100644 --- a/.github/workflows/main-ci.yml +++ b/.github/workflows/main-ci.yml @@ -32,12 +32,6 @@ jobs: # Resend RESEND_API_KEY: ${{ secrets.RESEND_API_KEY }} - # Sentry - NEXT_PUBLIC_SENTRY_DSN: ${{ vars.NEXT_PUBLIC_SENTRY_DSN }} - SENTRY_ORG: ${{ secrets.SENTRY_ORG }} - SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - steps: - name: Checkout code uses: actions/checkout@v4 diff --git a/.github/workflows/pr-ci.yml b/.github/workflows/pr-ci.yml index 84742de6..90070247 100644 --- a/.github/workflows/pr-ci.yml +++ b/.github/workflows/pr-ci.yml @@ -29,12 +29,6 @@ jobs: # Resend RESEND_API_KEY: ${{ secrets.RESEND_API_KEY }} - # Sentry - NEXT_PUBLIC_SENTRY_DSN: ${{ vars.NEXT_PUBLIC_SENTRY_DSN }} - SENTRY_ORG: ${{ secrets.SENTRY_ORG }} - SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - steps: - name: Checkout code uses: actions/checkout@v4 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0383605b..a18ae910 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -68,7 +68,6 @@ The Tech Stack: - [NeonDB](https://neon.tech) - [Clerk Auth](https://clerk.dev/) - [Upstash](https://upstash.com) -- [Sentry](https://sentry.io) - [Resend](https://resend.com) Development stuff: diff --git a/bun.lockb b/bun.lockb index e7f61505..fc8a96c5 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/next.config.js b/next.config.js index f3f66bdf..95a225f7 100644 --- a/next.config.js +++ b/next.config.js @@ -1,12 +1,16 @@ import { fileURLToPath } from 'node:url'; import createJiti from 'jiti'; -import { withSentryConfig } from '@sentry/nextjs'; +import bundleAnalyzerPlugin from '@next/bundle-analyzer'; const jiti = createJiti(fileURLToPath(import.meta.url)); jiti('./src/env'); +const withBundleAnalyzer = bundleAnalyzerPlugin({ + enabled: process.env['ANALYZE'] === 'true', +}); + /** @type {import('next').NextConfig} */ const nextConfig = { reactStrictMode: true, @@ -26,13 +30,4 @@ const nextConfig = { }, }; -export default withSentryConfig(nextConfig, { - org: process.env['SENTRY_ORG'] ?? '', - project: process.env['SENTRY_PROJECT'] ?? '', - silent: !process.env['CI'], - widenClientFileUpload: true, - tunnelRoute: '/monitoring', - hideSourceMaps: true, - disableLogger: true, - automaticVercelMonitors: true, -}); +export default withBundleAnalyzer(nextConfig); diff --git a/package.json b/package.json index fabba81c..1b798222 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,6 @@ "@radix-ui/react-select": "^2.0.0", "@radix-ui/react-slot": "^1.0.2", "@react-email/components": "^0.0.19", - "@sentry/nextjs": "^8.8.0", "@t3-oss/env-nextjs": "^0.10.1", "@tanstack/react-query": "^5.40.1", "@trpc/client": "next", @@ -107,6 +106,7 @@ "@eslint/js": "^9.4.0", "@happy-dom/global-registrator": "^14.12.0", "@ianvs/prettier-plugin-sort-imports": "^4.2.1", + "@next/bundle-analyzer": "^14.2.3", "@next/eslint-plugin-next": "^14.2.3", "@tailwindcss/aspect-ratio": "^0.4.2", "@tailwindcss/container-queries": "^0.1.1", diff --git a/sentry.client.config.ts b/sentry.client.config.ts deleted file mode 100644 index b1d9e14e..00000000 --- a/sentry.client.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { env } from '@/env'; -import * as Sentry from '@sentry/nextjs'; - -Sentry.init({ - dsn: env.NEXT_PUBLIC_SENTRY_DSN, - tracesSampleRate: 1, - debug: false, - replaysOnErrorSampleRate: 1.0, - replaysSessionSampleRate: 0.1, - integrations: [ - Sentry.replayIntegration({ - maskAllText: true, - blockAllMedia: true, - }), - ], -}); diff --git a/sentry.edge.config.ts b/sentry.edge.config.ts deleted file mode 100644 index ead9b7dd..00000000 --- a/sentry.edge.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { env } from '@/env'; -import * as Sentry from '@sentry/nextjs'; - -Sentry.init({ - dsn: env.NEXT_PUBLIC_SENTRY_DSN, - tracesSampleRate: 1, - debug: false, -}); diff --git a/sentry.server.config.ts b/sentry.server.config.ts deleted file mode 100644 index ead9b7dd..00000000 --- a/sentry.server.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { env } from '@/env'; -import * as Sentry from '@sentry/nextjs'; - -Sentry.init({ - dsn: env.NEXT_PUBLIC_SENTRY_DSN, - tracesSampleRate: 1, - debug: false, -}); diff --git a/src/app/(site)/early-access/layout.tsx b/src/app/(site)/early-access/layout.tsx index c6932ff9..ab7e31e3 100644 --- a/src/app/(site)/early-access/layout.tsx +++ b/src/app/(site)/early-access/layout.tsx @@ -1,14 +1,6 @@ import { TRPCReactProvider } from '@/lib/trpc/react'; -import { ClerkProvider } from '@clerk/nextjs'; -import { dark } from '@clerk/themes'; import type { PropsWithChildren } from 'react'; export default function EarlyAccessLayout({ children }: PropsWithChildren) { - return ( - - {children} - - ); + return {children}; } diff --git a/src/app/global-error.jsx b/src/app/global-error.jsx deleted file mode 100644 index fc093df1..00000000 --- a/src/app/global-error.jsx +++ /dev/null @@ -1,19 +0,0 @@ -'use client'; - -import * as Sentry from '@sentry/nextjs'; -import Error from 'next/error'; -import { useEffect } from 'react'; - -export default function GlobalError({ error }) { - useEffect(() => { - Sentry.captureException(error); - }, [error]); - - return ( - - - - - - ); -} diff --git a/src/env.ts b/src/env.ts index 620d6812..feb6b89c 100644 --- a/src/env.ts +++ b/src/env.ts @@ -24,25 +24,16 @@ export const env = createEnv({ // Clerk CLERK_SECRET_KEY: z.string(), - - // Sentry - SENTRY_ORG: z.string(), - SENTRY_PROJECT: z.string(), - SENTRY_AUTH_TOKEN: z.string(), }, client: { // Clerk NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY: z.string(), - - // Sentry - NEXT_PUBLIC_SENTRY_DSN: z.string().url(), }, experimental__runtimeEnv: { NODE_ENV: process.env.NODE_ENV, NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY: process.env['NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY'], - NEXT_PUBLIC_SENTRY_DSN: process.env['NEXT_PUBLIC_SENTRY_DSN'], }, skipValidation: !!process.env['SKIP_ENV_VALIDATION'], diff --git a/src/instrumentation.ts b/src/instrumentation.ts deleted file mode 100644 index c0247483..00000000 --- a/src/instrumentation.ts +++ /dev/null @@ -1,9 +0,0 @@ -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'); - } -} diff --git a/src/server/trpc.ts b/src/server/trpc.ts index 2dfded28..c0b84dac 100644 --- a/src/server/trpc.ts +++ b/src/server/trpc.ts @@ -7,14 +7,11 @@ import { db } from '@/db'; import { resend } from '@/lib/resend'; import { redis } from '@/lib/redis'; -export const createTRPCContext = async (opts: { headers: Headers }) => { - const session = await currentUser(); - +export const createTRPCContext = (opts: { headers: Headers }) => { return { db, resend, redis, - session, ...opts, }; }; @@ -37,14 +34,16 @@ export const createCallerFactory = t.createCallerFactory; export const createRouter = t.router; export const publicProcedure = t.procedure; -export const protectedProcedure = t.procedure.use(({ ctx, next }) => { - if (!ctx.session) { +export const protectedProcedure = t.procedure.use(async ({ next }) => { + const session = await currentUser(); + + if (!session) { throw new TRPCError({ code: 'UNAUTHORIZED' }); } return next({ ctx: { - session: { ...ctx.session }, + session: { ...session }, }, }); });