const logger = require('../util/logger'); const instrumentConfig = require('../config/instrumentConfig'); const { createHttpJsonConnector } = require('../instrument/connectors/httpJson'); const { createHl7TcpConnector } = require('../instrument/connectors/tcp'); const { createAstmSerialConnector } = require('../instrument/connectors/serial'); const { createIngestMessageHandler } = require('../instrument/ingest'); const connectorFactories = { 'http-json': createHttpJsonConnector, 'hl7-tcp': createHl7TcpConnector, 'astm-serial': createAstmSerialConnector }; function buildConnectors() { return instrumentConfig.list() .filter((entry) => entry.enabled) .map((entry) => { const createConnector = connectorFactories[entry.connector]; if (!createConnector) { logger.warn({ connector: entry.connector, instrument_id: entry.instrument_id }, 'unknown connector in instrument config, skipping startup'); return null; } return createConnector({ ...(entry.connectorConfig || {}), instrument_id: entry.instrument_id }); }) .filter(Boolean); } function attachConnectorHandlers(connectors) { connectors.forEach((connector) => { connector.onMessage(createIngestMessageHandler(connector)); connector.onError((err) => { logger.error({ err: err.message }, `${connector.name()} emitted error`); }); }); } async function startConnectors(connectors) { await Promise.all(connectors.map((connector) => connector.start())); } async function stopConnectors(connectors) { await Promise.all(connectors.map((connector) => connector.stop())); } module.exports = { buildConnectors, attachConnectorHandlers, startConnectors, stopConnectors };