diff --git a/apps/expo/app/_layout.tsx b/apps/expo/app/_layout.tsx index 81dd6426d5..1557c83ae4 100644 --- a/apps/expo/app/_layout.tsx +++ b/apps/expo/app/_layout.tsx @@ -20,6 +20,8 @@ Sentry.init({ // Adds more context data to events (IP address, cookies, user, etc.) // For more information, visit: https://docs.sentry.io/platforms/react-native/data-management/data-collected/ sendDefaultPii: true, + // Disable Sentry in local development or when no DSN is configured. + enabled: clientEnvs.NODE_ENV !== 'development' && !!clientEnvs.EXPO_PUBLIC_SENTRY_DSN, }); const user = userStore.peek(); diff --git a/packages/api/src/utils/__tests__/env-validation.test.ts b/packages/api/src/utils/__tests__/env-validation.test.ts index 49a75039ad..798a03faf7 100644 --- a/packages/api/src/utils/__tests__/env-validation.test.ts +++ b/packages/api/src/utils/__tests__/env-validation.test.ts @@ -79,6 +79,10 @@ describe('env-validation', () => { expect(apiEnvSchema.shape.SENTRY_DSN.safeParse('not-a-url').success).toBe(false); }); + it('accepts missing SENTRY_DSN for local development', () => { + expect(apiEnvSchema.shape.SENTRY_DSN.safeParse(undefined).success).toBe(true); + }); + it('validates OPENAI_API_KEY starts with sk-', () => { expect(apiEnvSchema.shape.OPENAI_API_KEY.safeParse('sk-test123').success).toBe(true); }); diff --git a/packages/api/src/utils/env-validation.ts b/packages/api/src/utils/env-validation.ts index 93b8cba0d0..7c9bda7268 100644 --- a/packages/api/src/utils/env-validation.ts +++ b/packages/api/src/utils/env-validation.ts @@ -6,7 +6,7 @@ import { z } from 'zod'; export const apiEnvSchema = z.object({ // Environment & Deployment ENVIRONMENT: z.enum(['development', 'production']).default('production'), - SENTRY_DSN: z.string().url(), + SENTRY_DSN: z.string().url().optional(), // Database NEON_DATABASE_URL: z.string().url(),