111 lines
5.5 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.servicesRouter = void 0;
const express_1 = require("express");
const auth_middleware_1 = require("../../middleware/auth.middleware");
const rbac_middleware_1 = require("../../middleware/rbac.middleware");
const env_1 = require("../../config/env");
const logger_1 = require("../../utils/logger");
const metrics_1 = require("../../utils/metrics");
const health_check_1 = require("../../utils/health-check");
const router = (0, express_1.Router)();
router.use(auth_middleware_1.authenticate);
router.use((0, rbac_middleware_1.requireRole)('SUPER_ADMIN'));
// Removed duplicated isServiceOnline - now using shared utility from utils/health-check.ts
// GET /api/services/status — check NocoDB, n8n, Gitea availability
router.get('/status', async (_req, res, next) => {
try {
const [nocodbOnline, n8nOnline, giteaOnline, mailhogOnline, miniqrOnline, excalidrawOnline, homepageOnline, vaultwardenOnline, rocketchatOnline, gancioOnline, jitsiOnline] = await Promise.all([
(0, health_check_1.isServiceOnline)(env_1.env.NOCODB_URL),
(0, health_check_1.isServiceOnline)(env_1.env.N8N_URL),
(0, health_check_1.isServiceOnline)(env_1.env.GITEA_URL),
(0, health_check_1.isServiceOnline)(env_1.env.MAILHOG_URL),
(0, health_check_1.isServiceOnline)(env_1.env.MINI_QR_URL),
(0, health_check_1.isServiceOnline)(env_1.env.EXCALIDRAW_URL),
(0, health_check_1.isServiceOnline)(env_1.env.HOMEPAGE_URL),
(0, health_check_1.isServiceOnline)(env_1.env.VAULTWARDEN_URL),
(0, health_check_1.isServiceOnline)(`${env_1.env.ROCKETCHAT_URL}/api/info`),
(0, health_check_1.isServiceOnline)(env_1.env.GANCIO_URL),
(0, health_check_1.isServiceOnline)(env_1.env.JITSI_URL),
]);
// Update Prometheus gauges
(0, metrics_1.setServiceUp)('nocodb', nocodbOnline);
(0, metrics_1.setServiceUp)('n8n', n8nOnline);
(0, metrics_1.setServiceUp)('gitea', giteaOnline);
(0, metrics_1.setServiceUp)('mailhog', mailhogOnline);
(0, metrics_1.setServiceUp)('miniqr', miniqrOnline);
(0, metrics_1.setServiceUp)('excalidraw', excalidrawOnline);
(0, metrics_1.setServiceUp)('homepage', homepageOnline);
(0, metrics_1.setServiceUp)('vaultwarden', vaultwardenOnline);
(0, metrics_1.setServiceUp)('rocketchat', rocketchatOnline);
(0, metrics_1.setServiceUp)('gancio', gancioOnline);
(0, metrics_1.setServiceUp)('jitsi', jitsiOnline);
res.json({
nocodb: { online: nocodbOnline, url: env_1.env.NOCODB_URL },
n8n: { online: n8nOnline, url: env_1.env.N8N_URL },
gitea: { online: giteaOnline, url: env_1.env.GITEA_URL },
mailhog: { online: mailhogOnline, url: env_1.env.MAILHOG_URL },
miniqr: { online: miniqrOnline, url: env_1.env.MINI_QR_URL },
excalidraw: { online: excalidrawOnline, url: env_1.env.EXCALIDRAW_URL },
homepage: { online: homepageOnline, url: env_1.env.HOMEPAGE_URL },
vaultwarden: { online: vaultwardenOnline, url: env_1.env.VAULTWARDEN_URL },
rocketchat: { online: rocketchatOnline, url: env_1.env.ROCKETCHAT_URL },
gancio: { online: gancioOnline, url: env_1.env.GANCIO_URL },
jitsi: { online: jitsiOnline, url: env_1.env.JITSI_URL },
});
}
catch (err) {
logger_1.logger.error('Failed to check services status', err);
next(err);
}
});
// GET /api/services/config — return public-facing port numbers + subdomain info for iframe URLs
router.get('/config', async (_req, res, _next) => {
res.json({
nocodbPort: env_1.env.NOCODB_EMBED_PORT,
n8nPort: env_1.env.N8N_EMBED_PORT,
giteaPort: env_1.env.GITEA_EMBED_PORT,
mailhogPort: env_1.env.MAILHOG_EMBED_PORT,
miniqrPort: env_1.env.MINI_QR_EMBED_PORT,
excalidrawPort: env_1.env.EXCALIDRAW_EMBED_PORT,
domain: env_1.env.DOMAIN,
nocodbSubdomain: 'db',
n8nSubdomain: 'n8n',
giteaSubdomain: 'git',
mailhogSubdomain: 'mail',
miniqrSubdomain: 'qr',
excalidrawSubdomain: 'draw',
// Listmonk (newsletter platform)
listmonkPort: 9001,
listmonkSubdomain: 'listmonk',
// Code Server (web IDE)
codeServerPort: env_1.env.CODE_SERVER_PORT,
codeServerSubdomain: 'code',
// MkDocs (documentation)
mkdocsPort: env_1.env.MKDOCS_PORT,
mkdocsSubdomain: 'docs',
// Grafana (metrics visualization)
grafanaPort: env_1.env.GRAFANA_EMBED_PORT,
grafanaSubdomain: 'grafana',
// Alertmanager (alert routing)
alertmanagerPort: env_1.env.ALERTMANAGER_EMBED_PORT,
alertmanagerSubdomain: 'alertmanager',
// Homepage (service dashboard)
homepagePort: env_1.env.HOMEPAGE_EMBED_PORT,
homepageSubdomain: 'home',
// Vaultwarden (password manager)
vaultwardenPort: env_1.env.VAULTWARDEN_EMBED_PORT,
vaultwardenSubdomain: 'vault',
// Rocket.Chat (team chat)
rocketchatPort: env_1.env.ROCKETCHAT_EMBED_PORT,
rocketchatSubdomain: 'chat',
// Gancio (event management)
gancioPort: env_1.env.GANCIO_EMBED_PORT,
gancioSubdomain: 'events',
// Jitsi Meet (video conferencing)
jitsiPort: env_1.env.JITSI_EMBED_PORT,
jitsiSubdomain: 'meet',
});
});
exports.servicesRouter = router;
//# sourceMappingURL=services.routes.js.map