#!/usr/bin/env node var app = require('../app'); var debug = require('debug')('bus-gateway:server'); var http = require('http'); var axios = require('axios'); var config = require('../config'); var port = normalizePort(process.env.PORT || '3000'); app.set('port', port); var server = http.createServer(app); const HAPI_HEALTH_URL = `${config.fhir.url}/metadata`; const RETRY_DELAY_MS = 5000; const MAX_ATTEMPTS = 36; // 3 minutos máximo async function waitForHapi() { for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) { try { await axios.get(HAPI_HEALTH_URL, { timeout: 5000 }); console.log(`[${new Date().toISOString()}] HAPI FHIR está listo`); return; } catch { console.log(`[${new Date().toISOString()}] Esperando HAPI FHIR (intento ${attempt}/${MAX_ATTEMPTS})...`); await new Promise(resolve => setTimeout(resolve, RETRY_DELAY_MS)); } } console.error(`[${new Date().toISOString()}] HAPI FHIR no respondió en el tiempo máximo de espera`); process.exit(1); } waitForHapi().then(() => { server.listen(port); server.on('error', onError); server.on('listening', onListening); }); function normalizePort(val) { var port = parseInt(val, 10); if (isNaN(port)) return val; if (port >= 0) return port; return false; } function onError(error) { if (error.syscall !== 'listen') throw error; var bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port; switch (error.code) { case 'EACCES': console.error(bind + ' requires elevated privileges'); process.exit(1); break; case 'EADDRINUSE': console.error(bind + ' is already in use'); process.exit(1); break; default: throw error; } } function onListening() { var addr = server.address(); var bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port; debug('Listening on ' + bind); console.log(`[${new Date().toISOString()}] bus-gateway escuchando en ${bind}`); }