- ScanScheduler: tier-based scheduling (BASIC=24h, PLUS=6h, PREMIUM=1h) - WebhookHandler: HMAC-verified webhook ingestion with SCAN_TRIGGER support - API routes: /scheduler and /webhooks endpoints under /api/v1/darkwatch - Jobs: scheduled scan checker + webhook retry processor via BullMQ - Schema: ScanSchedule, WebhookEvent models; ScanJob.scheduledBy field - Types: ScheduleStatus, WebhookEventType, WebhookTriggerInput - Tests: scheduler lifecycle + webhook signature/processing tests Co-Authored-By: Paperclip <noreply@paperclip.ing>
27 lines
1.1 KiB
TypeScript
27 lines
1.1 KiB
TypeScript
import { FastifyInstance } from "fastify";
|
|
|
|
export function darkwatchRoutes(fastify: FastifyInstance) {
|
|
fastify.register(async (root) => {
|
|
const watchlist = (await import("./watchlist.routes")).watchlistRoutes;
|
|
const exposures = (await import("./exposure.routes")).exposureRoutes;
|
|
const alerts = (await import("./alert.routes")).alertRoutes;
|
|
const scans = (await import("./scan.routes")).scanRoutes;
|
|
const scheduler = (await import("./scheduler.routes")).schedulerRoutes;
|
|
const webhooks = (await import("./webhook.routes")).webhookRoutes;
|
|
|
|
root.register(watchlist, { prefix: "/watchlist" });
|
|
root.register(exposures, { prefix: "/exposures" });
|
|
root.register(alerts, { prefix: "/alerts" });
|
|
root.register(scans, { prefix: "/scan" });
|
|
root.register(scheduler, { prefix: "/scheduler" });
|
|
root.register(webhooks, { prefix: "/webhooks" });
|
|
}, { prefix: "/api/v1/darkwatch" });
|
|
}
|
|
|
|
export function voiceprintRoutes(fastify: FastifyInstance) {
|
|
fastify.register(async (root) => {
|
|
const voiceprint = (await import("./voiceprint.routes")).voiceprintRoutes;
|
|
root.register(voiceprint);
|
|
}, { prefix: "/api/v1/voiceprint" });
|
|
}
|