68 lines
1.7 KiB
TypeScript
68 lines
1.7 KiB
TypeScript
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 };
|