/** * @cc-platform/server/health — Standardized health check endpoint * * Provides a consistent /api/health (or custom path) endpoint across * all platform services. Reports service name, uptime, and extensible * status information. * * Usage: * const { createHealthEndpoint } = require('@cc-platform/server/health'); * createHealthEndpoint(app, { * serviceName: 'inventory-manager', * getExtras: () => ({ * bridgeConnected: bridgeClients.size > 0, * webClients: webClients.size, * }), * }); */ 'use strict'; /** * Register a health check endpoint on an Express app. * * @param {Express.Application} app - Express app instance * @param {Object} [opts={}] - Options * @param {string} [opts.path='/api/health'] - Endpoint path * @param {string} [opts.serviceName='unknown'] - Service identifier * @param {Function} [opts.getExtras] - Returns additional status fields: () => Object */ function createHealthEndpoint(app, opts = {}) { const startTime = Date.now(); const healthPath = opts.path || '/api/health'; const serviceName = opts.serviceName || 'unknown'; app.get(healthPath, (_req, res) => { const status = { status: 'ok', service: serviceName, uptime: Math.floor((Date.now() - startTime) / 1000), timestamp: new Date().toISOString(), }; if (opts.getExtras) { try { Object.assign(status, opts.getExtras()); } catch (e) { status.warning = `Health extras error: ${e.message}`; } } res.json(status); }); } module.exports = { createHealthEndpoint };