- Update src/auth.ts auth configuration - Update src/env.mjs environment variable validation - Update src/i18n/request.ts locale handling - Update src/proxy.ts middleware - Update src/next-auth.d.ts type declarations - Update package.json and package-lock.json dependencies
41 lines
1.7 KiB
JavaScript
41 lines
1.7 KiB
JavaScript
import { createEnv } from "@t3-oss/env-nextjs";
|
|
import { z } from "zod";
|
|
|
|
export const env = createEnv({
|
|
server: {
|
|
DATABASE_URL: z.string().url(),
|
|
NODE_ENV: z.enum(["development", "test", "production"]).default("development"),
|
|
NEXTAUTH_SECRET: z.string().min(1).optional(),
|
|
NEXTAUTH_URL: z.string().url().optional(),
|
|
AI_API_KEY: z.string().min(1).optional(),
|
|
AI_BASE_URL: z.string().url().optional(),
|
|
AI_MODEL: z.string().min(1).optional(),
|
|
// Rate limit driver: "memory" (default, single-instance) or "redis" (distributed).
|
|
RATE_LIMIT_DRIVER: z.enum(["memory", "redis"]).default("memory"),
|
|
// Upstash Redis REST credentials (only required when RATE_LIMIT_DRIVER=redis).
|
|
UPSTASH_REDIS_REST_URL: z.string().url().optional(),
|
|
UPSTASH_REDIS_REST_TOKEN: z.string().min(1).optional(),
|
|
// audit-P2-5: Cron job bearer token for /api/cron/* endpoints.
|
|
CRON_SECRET: z.string().min(1).optional(),
|
|
},
|
|
client: {
|
|
NEXT_PUBLIC_APP_URL: z.string().url().optional(),
|
|
},
|
|
runtimeEnv: {
|
|
DATABASE_URL: process.env.DATABASE_URL,
|
|
NODE_ENV: process.env.NODE_ENV,
|
|
NEXTAUTH_SECRET: process.env.NEXTAUTH_SECRET,
|
|
NEXTAUTH_URL: process.env.NEXTAUTH_URL,
|
|
NEXT_PUBLIC_APP_URL: process.env.NEXT_PUBLIC_APP_URL,
|
|
AI_API_KEY: process.env.AI_API_KEY,
|
|
AI_BASE_URL: process.env.AI_BASE_URL,
|
|
AI_MODEL: process.env.AI_MODEL,
|
|
RATE_LIMIT_DRIVER: process.env.RATE_LIMIT_DRIVER,
|
|
UPSTASH_REDIS_REST_URL: process.env.UPSTASH_REDIS_REST_URL,
|
|
UPSTASH_REDIS_REST_TOKEN: process.env.UPSTASH_REDIS_REST_TOKEN,
|
|
CRON_SECRET: process.env.CRON_SECRET,
|
|
},
|
|
skipValidation: !!process.env.SKIP_ENV_VALIDATION,
|
|
emptyStringAsUndefined: true,
|
|
});
|