import { logger } from "@creations.works/logger"; const environment: Environment = { port: Number.parseInt(process.env.PORT || "", 10), host: process.env.HOST || "0.0.0.0", development: process.env.NODE_ENV === "development" || process.argv.includes("--dev"), }; const redisTtl: number = process.env.REDIS_TTL ? Number.parseInt(process.env.REDIS_TTL, 10) : 60 * 60 * 1; // 1 hour const cassandra: CassandraConfig = { host: process.env.CASSANDRA_HOST || "localhost", port: Number.parseInt(process.env.CASSANDRA_PORT || "9042", 10), keyspace: process.env.CASSANDRA_KEYSPACE || "void_db", username: process.env.CASSANDRA_USERNAME || "", password: process.env.CASSANDRA_PASSWORD || "", datacenter: process.env.CASSANDRA_DATACENTER || "", contactPoints: (process.env.CASSANDRA_CONTACT_POINTS || "localhost").split( ",", ), authEnabled: process.env.CASSANDRA_AUTH_ENABLED === "false", }; const jwt: JWTConfig = { secret: process.env.JWT_SECRET || "", expiration: process.env.JWT_EXPIRATION || "1h", issuer: process.env.JWT_ISSUER || "", algorithm: process.env.JWT_ALGORITHM || "HS256", }; function verifyRequiredVariables(): void { const requiredVariables = [ "HOST", "PORT", "REDIS_URL", "REDIS_TTL", "CASSANDRA_HOST", "CASSANDRA_PORT", "CASSANDRA_CONTACT_POINTS", "CASSANDRA_AUTH_ENABLED", "CASSANDRA_DATACENTER", "JWT_SECRET", "JWT_EXPIRATION", "JWT_ISSUER", ]; let hasError = false; for (const key of requiredVariables) { const value = process.env[key]; if (value === undefined || value.trim() === "") { logger.error(`Missing or empty environment variable: ${key}`); hasError = true; } } if (hasError) { process.exit(1); } } export { environment, cassandra, redisTtl, verifyRequiredVariables, jwt };