multibridge
Version:
A multi-database connection framework with centralized configuration
49 lines (48 loc) • 1.86 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createMongoDBConnection = createMongoDBConnection;
const mongodb_1 = require("mongodb");
const loggers_1 = __importDefault(require("../utils/loggers"));
/**
* Sanitize MongoDB connection URI for logging (removes password)
*/
function sanitizeMongoURI(uri) {
// Replace password in connection string with *** for logging
return uri.replace(/:([^:@]+)@/, ":***@");
}
async function createMongoDBConnection(config) {
let uri;
if (config.host.endsWith(".mongodb.net")) {
// MongoDB Atlas (Cluster) using SRV
uri = `mongodb+srv://${config.username}:${config.password}@${config.host}/${config.database}?authSource=admin`;
}
else {
// Self-hosted MongoDB (Local/Remote)
uri = `mongodb://${config.username}:${config.password}@${config.host}:${config.port ?? 27017}/${config.database}?authSource=admin`;
}
const sanitizedURI = sanitizeMongoURI(uri);
const client = new mongodb_1.MongoClient(uri, {
connectTimeoutMS: 10000,
serverSelectionTimeoutMS: 10000,
});
try {
await client.connect();
loggers_1.default.info(`Connected to MongoDB`, {
host: config.host,
database: config.database,
uri: sanitizedURI, // Log sanitized URI without password
});
return { client, db: client.db(config.database) };
}
catch (error) {
loggers_1.default.error(`Error connecting to MongoDB: ${error.message}`, {
host: config.host,
database: config.database,
uri: sanitizedURI, // Log sanitized URI without password
});
throw error;
}
}