seperate all config files, move so i can just call @config
All checks were successful
Code quality checks / biome (push) Successful in 8s

This commit is contained in:
creations 2025-05-03 08:00:36 -04:00
parent e98eebbb47
commit 9d8b3eb969
Signed by: creations
GPG key ID: 8F553AA4320FC711
13 changed files with 77 additions and 76 deletions

1
.gitignore vendored
View file

@ -1,3 +1,4 @@
/node_modules
bun.lock
.env
.vscode

12
config/cassandra.ts Normal file
View file

@ -0,0 +1,12 @@
export 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",
};

View file

@ -1,68 +0,0 @@
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 };

48
config/index.ts Normal file
View file

@ -0,0 +1,48 @@
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"),
};
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 * from "@config/cassandra";
export * from "@config/jwt";
export * from "@config/redis";
export { environment, verifyRequiredVariables };

6
config/jwt.ts Normal file
View file

@ -0,0 +1,6 @@
export 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",
};

3
config/redis.ts Normal file
View file

@ -0,0 +1,3 @@
export const redisTtl: number = process.env.REDIS_TTL
? Number.parseInt(process.env.REDIS_TTL, 10)
: 60 * 60 * 1; // 1 hour

View file

@ -1,10 +1,7 @@
import { readdir } from "node:fs/promises";
import { extname, join, resolve } from "node:path";
import { pathToFileURL } from "node:url";
import {
cassandra as cassandraConfig,
verifyRequiredVariables,
} from "@config/environment";
import { cassandra as cassandraConfig, verifyRequiredVariables } from "@config";
import { logger } from "@creations.works/logger";
import { cassandra } from "@lib/cassandra";

View file

@ -1,5 +1,5 @@
import { serverHandler } from "@/server";
import { verifyRequiredVariables } from "@config/environment";
import { verifyRequiredVariables } from "@config";
import { logger } from "@creations.works/logger";
import { cassandra } from "@lib/cassandra";
import { redis } from "bun";

View file

@ -1,4 +1,4 @@
import { cassandra as config } from "@config/environment";
import { cassandra as config } from "@config";
import { logger } from "@creations.works/logger";
import { Client, auth } from "cassandra-driver";

View file

@ -1,4 +1,4 @@
import { environment, jwt } from "@config/environment";
import { environment, jwt } from "@config";
import { redis } from "bun";
import { createDecoder, createSigner, createVerifier } from "fast-jwt";

View file

@ -0,0 +1 @@
// TODO: add after every other kinda of data related to the user

View file

@ -1,5 +1,5 @@
import { resolve } from "node:path";
import { environment } from "@config/environment";
import { environment } from "@config";
import { logger } from "@creations.works/logger";
import { jsonResponse } from "@lib/http";
import {

View file

@ -3,6 +3,7 @@
"baseUrl": "./",
"paths": {
"@/*": ["src/*"],
"@config": ["config/index.ts"],
"@config/*": ["config/*"],
"@types/*": ["types/*"],
"@lib/*": ["src/lib/*"]