const { Pool, Client } = require('pg'); const { Client: SSHClient } = require('ssh2'); let pool; function initPool(config) { // Log config without sensitive data const safeConfig = { host: config.host || process.env.DB_HOST, user: config.user || process.env.DB_USER, database: config.database || process.env.DB_NAME, port: config.port || process.env.DB_PORT || 5432, max: config.max || 10, idleTimeoutMillis: config.idleTimeoutMillis || 30000, connectionTimeoutMillis: config.connectionTimeoutMillis || 2000, ssl: config.ssl || false, password: (config.password || process.env.DB_PASSWORD) ? '[password set]' : '[no password]' }; console.log('[Database] Initializing pool with config:', safeConfig); // Create the pool with the configuration pool = new Pool({ host: config.host || process.env.DB_HOST, user: config.user || process.env.DB_USER, password: config.password || process.env.DB_PASSWORD, database: config.database || process.env.DB_NAME, port: config.port || process.env.DB_PORT || 5432, max: config.max || 10, idleTimeoutMillis: config.idleTimeoutMillis || 30000, connectionTimeoutMillis: config.connectionTimeoutMillis || 2000, ssl: config.ssl || false }); // Test the pool connection return pool.connect() .then(client => { console.log('[Database] Pool connection successful'); client.release(); return pool; }) .catch(err => { console.error('[Database] Connection failed:', err); throw err; }); } async function getConnection() { if (!pool) { throw new Error('Database pool not initialized'); } return pool.connect(); } module.exports = { initPool, getConnection, getPool: () => pool };