mirror of
https://github.com/ZeppelinBot/Zeppelin.git
synced 2025-03-16 06:11:49 +00:00
50 lines
1.6 KiB
TypeScript
50 lines
1.6 KiB
TypeScript
import path from "path";
|
|
import fs from "fs";
|
|
import dotenv from "dotenv";
|
|
import { rootDir } from "./paths";
|
|
import { z } from "zod";
|
|
|
|
const envType = z.object({
|
|
KEY: z.string().length(32),
|
|
|
|
CLIENT_ID: z.string().min(16),
|
|
CLIENT_SECRET: z.string().length(32),
|
|
BOT_TOKEN: z.string().min(50),
|
|
|
|
DASHBOARD_URL: z.string().url(),
|
|
API_URL: z.string().url(),
|
|
API_PORT: z.preprocess((v) => Number(v), z.number().min(1).max(65535)).default(3000),
|
|
|
|
STAFF: z.preprocess((v) => String(v).split(","), z.array(z.string())).optional(),
|
|
|
|
PHISHERMAN_API_KEY: z.string().optional(),
|
|
|
|
DOCKER_DEV_MYSQL_PASSWORD: z.string().optional(), // Included here for the DB_PASSWORD default in development
|
|
DOCKER_PROD_MYSQL_PASSWORD: z.string().optional(), // Included here for the DB_PASSWORD default in production
|
|
|
|
DB_HOST: z.string().optional().default("mysql"),
|
|
DB_PORT: z
|
|
.preprocess((v) => Number(v), z.number())
|
|
.optional()
|
|
.default(3306),
|
|
DB_USER: z.string().optional().default("zeppelin"),
|
|
DB_PASSWORD: z.string().optional(), // Default is set to DOCKER_MYSQL_PASSWORD further below
|
|
DB_DATABASE: z.string().optional().default("zeppelin"),
|
|
});
|
|
|
|
let toValidate = {};
|
|
const envPath = path.join(rootDir, ".env");
|
|
if (fs.existsSync(envPath)) {
|
|
const buf = fs.readFileSync(envPath);
|
|
toValidate = dotenv.parse(buf);
|
|
}
|
|
|
|
export const env = envType.parse(toValidate);
|
|
|
|
if (!env.DB_PASSWORD) {
|
|
if (process.env.NODE_ENV === "production" && env.DOCKER_PROD_MYSQL_PASSWORD) {
|
|
env.DB_PASSWORD = env.DOCKER_PROD_MYSQL_PASSWORD;
|
|
} else if (env.DOCKER_DEV_MYSQL_PASSWORD) {
|
|
env.DB_PASSWORD = env.DOCKER_DEV_MYSQL_PASSWORD;
|
|
}
|
|
}
|