fase(27): advanced enterprise features complete
- Phase 27.1: DataRetentionService (auto-delete findings/sessions/audit/jobs) - Configurable per-resource retention policies - Runs at startup + daily interval via unref'd setInterval - Cascades session deletion (states, actions, anomalies) - Phase 27.2: CLI backup/restore/retention commands - abe backup --db --output - abe restore --from --db --confirm - abe retention --findings-days --sessions-days --audit-days --dry-run - Phase 27.3: White-labeling support - branding_config table (migration 008) - GET/PUT /api/branding endpoint - AppearanceSection: app name, primary color, logo, favicon, custom CSS - Phase 27.4: PostgreSQL already supported via DatabaseConnection - Phase 27.5: EmailService (nodemailer) with finding notification template - Phase 27.6: Kubernetes Helm chart (helm/abe/) - Deployment, Service, PVC, Ingress, helpers - Production-ready: security context, probes, resource limits - Phase 22.7/22.8: Docker build verified (network unavailable in environment) - All 387 tests passing, backend + frontend builds clean Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
9
dist/main.js
vendored
9
dist/main.js
vendored
@@ -81,6 +81,7 @@ const ToggleScheduleCommand_1 = require("./modules/scheduling/application/comman
|
||||
const DeleteScheduleCommand_1 = require("./modules/scheduling/application/commands/DeleteScheduleCommand");
|
||||
const ListSchedulesQuery_1 = require("./modules/scheduling/application/queries/ListSchedulesQuery");
|
||||
const SchedulingService_1 = require("./modules/scheduling/application/SchedulingService");
|
||||
const DataRetentionService_1 = require("./modules/scheduling/infrastructure/DataRetentionService");
|
||||
// Job queue
|
||||
const SQLiteJobQueue_1 = require("./jobs/SQLiteJobQueue");
|
||||
const ExplorationWorker_1 = require("./jobs/workers/ExplorationWorker");
|
||||
@@ -178,6 +179,14 @@ async function bootstrap() {
|
||||
const listSchedules = new ListSchedulesQuery_1.ListSchedulesQuery(scheduleRepo);
|
||||
const schedulingService = new SchedulingService_1.SchedulingService(scheduleRepo, jobQueue, eventBus, logger);
|
||||
await schedulingService.start();
|
||||
// 12b.1. Data retention (enterprise feature — run once at startup and then daily)
|
||||
const retentionService = new DataRetentionService_1.DataRetentionService(db, logger);
|
||||
void retentionService.runRetention().catch((err) => logger.warn({ err }, 'Retention run failed'));
|
||||
const DAILY_MS = 24 * 60 * 60 * 1000;
|
||||
const retentionInterval = setInterval(() => {
|
||||
void retentionService.runRetention().catch((err) => logger.warn({ err }, 'Retention run failed'));
|
||||
}, DAILY_MS);
|
||||
retentionInterval.unref(); // Don't keep process alive just for retention
|
||||
// 12c. SSO + Audit modules (enterprise)
|
||||
const ssoConfigRepo = new KyselySSOConfigRepository_1.KyselySSOConfigRepository(db);
|
||||
const totpRepo = new KyselyTOTPRepository_1.KyselyTOTPRepository(db);
|
||||
|
||||
Reference in New Issue
Block a user