const express = require('express'); const dbOps = require('./database'); const { closeBrowser } = require('./browser'); const routes = require('./routes'); const config = require('./config'); const app = express(); // Use routes app.use('/', routes); // Cleanup expired cache entries async function cleanupExpiredCache() { const now = Date.now(); const deleted = await dbOps.deleteExpired(now); if (deleted > 0) { console.log(`Cleaned up ${deleted} expired cache entries`); } } // Initialize database and start server (async () => { try { await dbOps.init(); console.log(`Database initialized: ${dbOps.getDbType()}`); // Periodic cache cleanup (every hour) setInterval(cleanupExpiredCache, 60 * 60 * 1000); // Initial cleanup on startup await cleanupExpiredCache(); // Start server app.listen(config.PORT, '0.0.0.0', () => { console.log(`Playwright API server listening on port ${config.PORT}`); console.log(`Cache expiry: ${config.CACHE_EXPIRY_HOURS} hours`); console.log(`Database: ${dbOps.getDbType()}${dbOps.getDbType() === 'postgres' ? ` (${config.POSTGRES_HOST}:${config.POSTGRES_PORT}/${config.POSTGRES_DB})` : ` (${config.DB_PATH})`}`); console.log(`API Key authentication: ${config.API_KEY ? 'enabled' : 'disabled'}`); }); } catch (error) { console.error('Failed to initialize:', error); process.exit(1); } })(); // Graceful shutdown process.on('SIGTERM', async () => { console.log('SIGTERM received, shutting down gracefully...'); await closeBrowser(); await dbOps.close(); process.exit(0); }); process.on('SIGINT', async () => { console.log('SIGINT received, shutting down gracefully...'); await closeBrowser(); await dbOps.close(); process.exit(0); });