- Introduced "video" as a new content type across backend and frontend. - Updated validation schemas and MIME-type handling for video files. - Implemented file size limits for videos (10 MB max) in configuration. - Enhanced upload flow with auto-detection of file types (image, GIF, video). - Expanded media processing to handle video files and convert them to WebM format.
66 lines
1.8 KiB
TypeScript
66 lines
1.8 KiB
TypeScript
import { z } from "zod";
|
|
|
|
export const envSchema = z.object({
|
|
NODE_ENV: z.enum(["development", "production", "test"]).default("development"),
|
|
PORT: z.coerce.number().default(3000),
|
|
|
|
// Database
|
|
POSTGRES_HOST: z.string(),
|
|
POSTGRES_PORT: z.coerce.number().default(5432),
|
|
POSTGRES_DB: z.string(),
|
|
POSTGRES_USER: z.string(),
|
|
POSTGRES_PASSWORD: z.string(),
|
|
|
|
// S3
|
|
S3_ENDPOINT: z.string().default("localhost"),
|
|
S3_PORT: z.coerce.number().default(9000),
|
|
S3_USE_SSL: z.preprocess((val) => val === "true", z.boolean()).default(false),
|
|
S3_ACCESS_KEY: z.string().default("minioadmin"),
|
|
S3_SECRET_KEY: z.string().default("minioadmin"),
|
|
S3_BUCKET_NAME: z.string().default("memegoat"),
|
|
|
|
// Security
|
|
JWT_SECRET: z.string().min(32),
|
|
ENCRYPTION_KEY: z.string().length(32),
|
|
PGP_ENCRYPTION_KEY: z.string().min(16),
|
|
|
|
// Mail
|
|
MAIL_HOST: z.string(),
|
|
MAIL_PORT: z.coerce.number(),
|
|
MAIL_SECURE: z.preprocess((val) => val === "true", z.boolean()).default(false),
|
|
MAIL_USER: z.string(),
|
|
MAIL_PASS: z.string(),
|
|
MAIL_FROM: z.string().email(),
|
|
|
|
DOMAIN_NAME: z.string(),
|
|
API_URL: z.string().url().optional(),
|
|
|
|
// Sentry
|
|
SENTRY_DSN: z.string().optional(),
|
|
|
|
// Redis
|
|
REDIS_HOST: z.string().default("localhost"),
|
|
REDIS_PORT: z.coerce.number().default(6379),
|
|
|
|
// Session
|
|
SESSION_PASSWORD: z.string().min(32),
|
|
|
|
// Media Limits
|
|
MAX_IMAGE_SIZE_KB: z.coerce.number().default(512),
|
|
MAX_GIF_SIZE_KB: z.coerce.number().default(1024),
|
|
MAX_VIDEO_SIZE_KB: z.coerce.number().default(10240),
|
|
});
|
|
|
|
export type Env = z.infer<typeof envSchema>;
|
|
|
|
export function validateEnv(config: Record<string, unknown>) {
|
|
const result = envSchema.safeParse(config);
|
|
|
|
if (!result.success) {
|
|
console.error("❌ Invalid environment variables:", result.error.format());
|
|
throw new Error("Invalid environment variables");
|
|
}
|
|
|
|
return result.data;
|
|
}
|