env.ts 1.5 KB

123456789101112131415161718192021222324252627282930
  1. import { createEnv } from "@t3-oss/env-nextjs";
  2. import { z } from "zod";
  3. export const env = createEnv({
  4. server: {
  5. TMDB_API_KEY: z.string().min(1, "TMDB_API_KEY is required"),
  6. SUPABASE_INTERNAL_URL: z.string().url("SUPABASE_INTERNAL_URL must be a valid URL"),
  7. SUPABASE_SERVICE_ROLE_KEY: z.string().min(1, "SUPABASE_SERVICE_ROLE_KEY is required"),
  8. MASTER_ADMIN_USERNAME: z.string().min(1, "MASTER_ADMIN_USERNAME is required"),
  9. MASTER_ADMIN_TOTP_SECRET: z.string().min(1, "MASTER_ADMIN_TOTP_SECRET is required"),
  10. IRON_SESSION_SECRET: z.string().min(32, "IRON_SESSION_SECRET must be at least 32 characters"),
  11. },
  12. client: {
  13. NEXT_PUBLIC_SUPABASE_URL: z.string().url("NEXT_PUBLIC_SUPABASE_URL must be a valid URL"),
  14. NEXT_PUBLIC_SUPABASE_ANON_KEY: z.string().min(1, "NEXT_PUBLIC_SUPABASE_ANON_KEY is required"),
  15. NEXT_PUBLIC_SENTRY_DSN: z.string().optional(),
  16. },
  17. runtimeEnv: {
  18. TMDB_API_KEY: process.env.TMDB_API_KEY,
  19. SUPABASE_INTERNAL_URL: process.env.SUPABASE_INTERNAL_URL,
  20. SUPABASE_SERVICE_ROLE_KEY: process.env.SUPABASE_SERVICE_ROLE_KEY,
  21. MASTER_ADMIN_USERNAME: process.env.MASTER_ADMIN_USERNAME,
  22. MASTER_ADMIN_TOTP_SECRET: process.env.MASTER_ADMIN_TOTP_SECRET,
  23. IRON_SESSION_SECRET: process.env.IRON_SESSION_SECRET,
  24. NEXT_PUBLIC_SUPABASE_URL: process.env.NEXT_PUBLIC_SUPABASE_URL,
  25. NEXT_PUBLIC_SUPABASE_ANON_KEY: process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY,
  26. NEXT_PUBLIC_SENTRY_DSN: process.env.NEXT_PUBLIC_SENTRY_DSN,
  27. },
  28. skipValidation: !!process.env.SKIP_ENV_VALIDATION,
  29. });