132 lines
4.7 KiB
JavaScript
132 lines
4.7 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.listmonkRouter = void 0;
|
|
const express_1 = require("express");
|
|
const auth_middleware_1 = require("../../middleware/auth.middleware");
|
|
const rbac_middleware_1 = require("../../middleware/rbac.middleware");
|
|
const listmonk_client_1 = require("../../services/listmonk.client");
|
|
const listmonk_sync_service_1 = require("../../services/listmonk-sync.service");
|
|
const listmonk_event_sync_service_1 = require("../../services/listmonk-event-sync.service");
|
|
const env_1 = require("../../config/env");
|
|
const roles_1 = require("../../utils/roles");
|
|
const router = (0, express_1.Router)();
|
|
exports.listmonkRouter = router;
|
|
router.use(auth_middleware_1.authenticate);
|
|
router.use((0, rbac_middleware_1.requireRole)(...roles_1.BROADCAST_ROLES));
|
|
// GET /api/listmonk — sync status
|
|
router.get('/', async (_req, res, next) => {
|
|
try {
|
|
const status = listmonk_sync_service_1.listmonkSyncService.getStatus();
|
|
// Live connection check
|
|
const connected = await listmonk_client_1.listmonkClient.checkHealth();
|
|
res.json({ ...status, connected });
|
|
}
|
|
catch (err) {
|
|
next(err);
|
|
}
|
|
});
|
|
// GET /api/listmonk/stats — list subscriber counts
|
|
router.get('/stats', async (_req, res, next) => {
|
|
try {
|
|
const stats = await listmonk_sync_service_1.listmonkSyncService.getStats();
|
|
res.json(stats);
|
|
}
|
|
catch (err) {
|
|
next(err);
|
|
}
|
|
});
|
|
// POST /api/listmonk/test-connection
|
|
router.post('/test-connection', async (_req, res, next) => {
|
|
try {
|
|
const healthy = await listmonk_client_1.listmonkClient.checkHealth();
|
|
res.json({
|
|
success: healthy,
|
|
message: healthy ? 'Listmonk is reachable' : 'Listmonk is not reachable',
|
|
});
|
|
}
|
|
catch (err) {
|
|
next(err);
|
|
}
|
|
});
|
|
// POST /api/listmonk/sync/participants
|
|
router.post('/sync/participants', async (_req, res, next) => {
|
|
try {
|
|
const results = await listmonk_sync_service_1.listmonkSyncService.syncCampaignParticipants();
|
|
listmonk_sync_service_1.listmonkSyncService.setLastSyncAt(new Date());
|
|
res.json({
|
|
success: true,
|
|
message: `Synced ${results.success}/${results.total} campaign participants`,
|
|
results,
|
|
});
|
|
}
|
|
catch (err) {
|
|
listmonk_sync_service_1.listmonkSyncService.setLastError(err instanceof Error ? err.message : String(err));
|
|
next(err);
|
|
}
|
|
});
|
|
// POST /api/listmonk/sync/locations
|
|
router.post('/sync/locations', async (_req, res, next) => {
|
|
try {
|
|
const results = await listmonk_sync_service_1.listmonkSyncService.syncLocations();
|
|
listmonk_sync_service_1.listmonkSyncService.setLastSyncAt(new Date());
|
|
res.json({
|
|
success: true,
|
|
message: `Synced ${results.success}/${results.total} locations`,
|
|
results,
|
|
});
|
|
}
|
|
catch (err) {
|
|
listmonk_sync_service_1.listmonkSyncService.setLastError(err instanceof Error ? err.message : String(err));
|
|
next(err);
|
|
}
|
|
});
|
|
// POST /api/listmonk/sync/users
|
|
router.post('/sync/users', async (_req, res, next) => {
|
|
try {
|
|
const results = await listmonk_sync_service_1.listmonkSyncService.syncUsers();
|
|
listmonk_sync_service_1.listmonkSyncService.setLastSyncAt(new Date());
|
|
res.json({
|
|
success: true,
|
|
message: `Synced ${results.success}/${results.total} users`,
|
|
results,
|
|
});
|
|
}
|
|
catch (err) {
|
|
listmonk_sync_service_1.listmonkSyncService.setLastError(err instanceof Error ? err.message : String(err));
|
|
next(err);
|
|
}
|
|
});
|
|
// POST /api/listmonk/sync/all
|
|
router.post('/sync/all', async (_req, res, next) => {
|
|
try {
|
|
const results = await listmonk_sync_service_1.listmonkSyncService.syncAll();
|
|
res.json({
|
|
success: true,
|
|
message: 'All syncs completed',
|
|
results,
|
|
});
|
|
}
|
|
catch (err) {
|
|
next(err);
|
|
}
|
|
});
|
|
// POST /api/listmonk/reinitialize
|
|
router.post('/reinitialize', async (_req, res, next) => {
|
|
try {
|
|
await listmonk_sync_service_1.listmonkSyncService.reinitialize();
|
|
res.json({ success: true, message: 'Lists reinitialized' });
|
|
}
|
|
catch (err) {
|
|
next(err);
|
|
}
|
|
});
|
|
// GET /api/listmonk/event-sync-stats — event-driven sync stats
|
|
router.get('/event-sync-stats', (_req, res) => {
|
|
res.json(listmonk_event_sync_service_1.listmonkEventSyncService.getStats());
|
|
});
|
|
// GET /api/listmonk/proxy-url — get proxy port + token for iframe embedding
|
|
router.get('/proxy-url', (req, res, _next) => {
|
|
const token = req.headers.authorization?.slice(7) || '';
|
|
res.json({ port: env_1.env.LISTMONK_PROXY_PORT, token });
|
|
});
|
|
//# sourceMappingURL=listmonk.routes.js.map
|