multibridge
Version:
A multi-database connection framework with centralized configuration
68 lines (67 loc) • 3.42 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.envConfig = void 0;
const dotenv_1 = __importDefault(require("dotenv"));
const path_1 = __importDefault(require("path"));
// Directly specify the path to your .env file
dotenv_1.default.config({ path: path_1.default.resolve(process.cwd(), ".env") });
const requiredEnvVars = [
"CENTRAL_DB_HOST",
"CENTRAL_DB_PORT",
"CENTRAL_DB_USER",
"CENTRAL_DB_PASSWORD",
"CENTRAL_DB_NAME",
"CENTRAL_DB_TABLE",
];
requiredEnvVars.forEach((envVar) => {
if (!process.env[envVar]) {
throw new Error(`Environment variable ${envVar} is required but not set.`);
}
});
const port = parseInt(process.env.CENTRAL_DB_PORT, 10);
if (isNaN(port)) {
throw new Error("Environment variable CENTRAL_DB_PORT must be a valid number.");
}
// Parse optional numeric configs with defaults
const parseIntWithDefault = (value, defaultValue) => {
if (!value)
return defaultValue;
const parsed = parseInt(value, 10);
return isNaN(parsed) ? defaultValue : parsed;
};
exports.envConfig = {
CENTRAL_DB_HOST: process.env.CENTRAL_DB_HOST,
CENTRAL_DB_PORT: port,
CENTRAL_DB_USER: process.env.CENTRAL_DB_USER,
CENTRAL_DB_PASSWORD: process.env.CENTRAL_DB_PASSWORD,
CENTRAL_DB_NAME: process.env.CENTRAL_DB_NAME,
CENTRAL_DB_TABLE: process.env.CENTRAL_DB_TABLE,
LOG_LEVEL: process.env.LOG_LEVEL || "info",
// Connection cache settings
CONNECTION_CACHE_MAX_SIZE: parseIntWithDefault(process.env.CONNECTION_CACHE_MAX_SIZE, 100),
CONNECTION_CACHE_TTL_MS: parseIntWithDefault(process.env.CONNECTION_CACHE_TTL_MS, 0), // 0 = no TTL
// Config cache settings
CONFIG_CACHE_TTL_MS: parseIntWithDefault(process.env.CONFIG_CACHE_TTL_MS, 900000), // 15 minutes default
// Connection pool settings
POSTGRES_POOL_MAX: parseIntWithDefault(process.env.POSTGRES_POOL_MAX, 10),
POSTGRES_POOL_MIN: parseIntWithDefault(process.env.POSTGRES_POOL_MIN, 2),
MYSQL_POOL_MAX: parseIntWithDefault(process.env.MYSQL_POOL_MAX, 10),
MYSQL_QUEUE_LIMIT: parseIntWithDefault(process.env.MYSQL_QUEUE_LIMIT, 0),
// Query timeout settings (in milliseconds)
QUERY_TIMEOUT_MS: parseIntWithDefault(process.env.QUERY_TIMEOUT_MS, 30000), // 30 seconds default
POSTGRES_QUERY_TIMEOUT_MS: parseIntWithDefault(process.env.POSTGRES_QUERY_TIMEOUT_MS, 30000),
MYSQL_QUERY_TIMEOUT_MS: parseIntWithDefault(process.env.MYSQL_QUERY_TIMEOUT_MS, 30000),
MONGODB_QUERY_TIMEOUT_MS: parseIntWithDefault(process.env.MONGODB_QUERY_TIMEOUT_MS, 30000),
CASSANDRA_QUERY_TIMEOUT_MS: parseIntWithDefault(process.env.CASSANDRA_QUERY_TIMEOUT_MS, 30000),
// Connection validation settings
CONNECTION_VALIDATION_TTL_MS: parseIntWithDefault(process.env.CONNECTION_VALIDATION_TTL_MS, 60000), // 1 minute default
// Retry settings
CONNECTION_RETRY_ATTEMPTS: parseIntWithDefault(process.env.CONNECTION_RETRY_ATTEMPTS, 3),
CONNECTION_RETRY_DELAY_MS: parseIntWithDefault(process.env.CONNECTION_RETRY_DELAY_MS, 1000),
// Rate limiting settings
RATE_LIMIT_MAX_REQUESTS: parseIntWithDefault(process.env.RATE_LIMIT_MAX_REQUESTS, 10),
RATE_LIMIT_WINDOW_MS: parseIntWithDefault(process.env.RATE_LIMIT_WINDOW_MS, 60000), // 1 minute
};