- 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>
48 lines
1.7 KiB
Docker
48 lines
1.7 KiB
Docker
FROM node:20-alpine AS builder
|
|
|
|
WORKDIR /app
|
|
|
|
COPY package.json package-lock.json turbo.json ./
|
|
COPY packages/api/package.json ./packages/api/
|
|
COPY packages/db/package.json ./packages/db/
|
|
COPY packages/types/package.json ./packages/types/
|
|
COPY packages/core/package.json ./packages/core/ 2>/dev/null || true
|
|
COPY packages/jobs/package.json ./packages/jobs/
|
|
COPY packages/shared-notifications/package.json ./packages/shared-notifications/
|
|
COPY services/darkwatch/package.json ./services/darkwatch/
|
|
COPY services/spamshield/package.json ./services/spamshield/
|
|
COPY services/voiceprint/package.json ./services/voiceprint/
|
|
|
|
RUN npm ci
|
|
|
|
COPY tsconfig.json ./
|
|
COPY packages/api/tsconfig.json ./packages/api/
|
|
COPY packages/db/tsconfig.json ./packages/db/
|
|
COPY packages/types/tsconfig.json ./packages/types/
|
|
COPY packages/api/ ./packages/api/
|
|
COPY packages/db/ ./packages/db/
|
|
COPY packages/types/ ./packages/types/
|
|
|
|
RUN npm run build --workspace=@shieldai/types --workspace=@shieldai/db --workspace=@shieldai/api
|
|
|
|
FROM node:20-alpine AS runner
|
|
|
|
WORKDIR /app
|
|
|
|
RUN addgroup --system --gid 1001 nodejs && \
|
|
adduser --system --uid 1001 shieldai
|
|
|
|
COPY --from=builder --chown=shieldai:nodejs /app/packages/api/dist ./dist
|
|
COPY --from=builder --chown=shieldai:nodejs /app/node_modules ./node_modules
|
|
COPY --from=builder --chown=shieldai:nodejs /app/packages/api/package.json ./package.json
|
|
COPY --from=builder --chown=shieldai:nodejs /app/packages/db ./packages/db
|
|
|
|
USER shieldai
|
|
|
|
EXPOSE 3000
|
|
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
|
CMD node -e "require('http').get('http://localhost:3000/health', (r) => { process.exit(r.statusCode === 200 ? 0 : 1) })"
|
|
|
|
CMD ["node", "dist/server.js"]
|