import { randomBytes } from "crypto"; import { z } from "zod/v4"; import { createBooleanSchema, createEnv } from "@homarr/core/infrastructure/env"; const errorSuffix = `, please generate a 64 character secret in hex format or use the following: "${randomBytes(32).toString("hex")}"`; export const env = createEnv({ shared: { NODE_ENV: z.enum(["development", "production", "test"]).default("development"), }, server: { SECRET_ENCRYPTION_KEY: z .string({ error: `SECRET_ENCRYPTION_KEY is required${errorSuffix}`, }) .min(64, { message: `SECRET_ENCRYPTION_KEY has to be 64 characters${errorSuffix}`, }) .max(64, { message: `SECRET_ENCRYPTION_KEY has to be 64 characters${errorSuffix}`, }) .regex(/^[0-9a-fA-F]{64}$/, { message: `SECRET_ENCRYPTION_KEY must only contain hex characters${errorSuffix}`, }), NO_EXTERNAL_CONNECTION: createBooleanSchema(false), ENABLE_DNS_CACHING: createBooleanSchema(false), }, runtimeEnv: { SECRET_ENCRYPTION_KEY: process.env.SECRET_ENCRYPTION_KEY, NODE_ENV: process.env.NODE_ENV, NO_EXTERNAL_CONNECTION: process.env.NO_EXTERNAL_CONNECTION, ENABLE_DNS_CACHING: process.env.ENABLE_DNS_CACHING, }, });