Files
imen_pishghaman/apps/api/dist/config/env.js
T

43 lines
1.7 KiB
JavaScript

import { existsSync } from "node:fs";
import { z } from "zod";
if (existsSync(".env"))
process.loadEnvFile(".env");
const bool = (fallback) => z
.enum(["true", "false", "1", "0"])
.optional()
.transform((v) => (v === undefined ? fallback : v === "true" || v === "1"));
const schema = z.object({
NODE_ENV: z.enum(["development", "production", "test"]).default("development"),
PORT: z.coerce.number().int().default(4000),
CORS_ORIGINS: z.string().default(""),
TRUST_PROXY: z.coerce.number().int().min(0).default(1),
DATABASE_URL: z.string().min(1),
JWT_SECRET: z.string().min(32, "JWT_SECRET must be at least 32 characters"),
JWT_ACCESS_TTL: z.string().default("15m"),
REFRESH_TTL_DAYS: z.coerce.number().int().positive().default(30),
COOKIE_SECURE: bool(true),
S3_ENDPOINT: z.string().optional(),
S3_REGION: z.string().default("us-east-1"),
S3_BUCKET: z.string().default("imen-media"),
S3_ACCESS_KEY: z.string().default(""),
S3_SECRET_KEY: z.string().default(""),
S3_FORCE_PATH_STYLE: bool(true),
S3_ENSURE_BUCKET: bool(false),
MEDIA_PUBLIC_URL: z
.string()
.default("/media")
.transform((v) => v.replace(/\/+$/, "")),
WEB_REVALIDATE_URL: z.string().optional(),
REVALIDATE_SECRET: z.string().optional(),
ADMIN_PHONE: z.string().optional(),
ADMIN_PASSWORD: z.string().optional(),
ADMIN_NAME: z.string().default("مدیر سایت"),
});
const parsed = schema.safeParse(process.env);
if (!parsed.success) {
console.error("Invalid environment variables:\n" + z.prettifyError(parsed.error));
process.exit(1);
}
export const env = parsed.data;
export const isProd = env.NODE_ENV === "production";
//# sourceMappingURL=env.js.map