import { IUnleashConfig } from '../../types'; import MaintenanceService from './maintenance-service'; import { IAuthRequest } from '../../routes/unleash-types'; export const MAINTENANCE_MODE_ENABLED = 'Unleash is currently in maintenance mode.'; const maintenanceMiddleware = ( { getLogger }: Pick, maintenanceService: MaintenanceService, ): any => { const logger = getLogger('/middleware/maintenance-middleware.ts'); logger.debug('Enabling Maintenance middleware'); return async (req: IAuthRequest, res, next) => { const isProtectedPath = !req.path.includes('/maintenance'); const writeMethod = ['POST', 'PUT', 'DELETE'].includes(req.method); if ( isProtectedPath && writeMethod && (await maintenanceService.isMaintenanceMode()) ) { res.status(503).send({ message: MAINTENANCE_MODE_ENABLED, }); } else { next(); } }; }; export default maintenanceMiddleware;