← back to Dear Bubbe Admin

backend/routes/scanner.js

113 lines

const express = require('express')
const MessageInterceptor = require('../middleware/MessageInterceptor')
const router = express.Router()

// Initialize message interceptor (will be set by server)
let messageInterceptor = null

// Set the interceptor instance (called from server.js)
router.setInterceptor = (interceptor) => {
  messageInterceptor = interceptor
}

// Public endpoint for scanning messages (no auth required for integration)
router.post('/scan-message', async (req, res) => {
  try {
    if (!messageInterceptor) {
      return res.status(503).json({
        success: false,
        error: 'Scanner not initialized'
      })
    }

    const messageData = req.body
    
    // Validate required fields
    if (!messageData.message) {
      return res.status(400).json({
        success: false,
        error: 'Message is required'
      })
    }

    console.log(`[SCANNER] Processing message from ${messageData.userId || 'unknown'}`)
    
    const result = await messageInterceptor.processMessage(messageData)
    
    res.json({
      success: true,
      result
    })
    
  } catch (error) {
    console.error('[SCANNER] Error:', error)
    res.status(500).json({
      success: false,
      error: error.message
    })
  }
})

// Health check for scanner
router.get('/scanner/health', (req, res) => {
  res.json({
    success: true,
    status: 'healthy',
    timestamp: new Date(),
    scannerReady: !!messageInterceptor
  })
})

// Get scanner stats (auth required)
router.get('/scanner/stats', async (req, res) => {
  try {
    // This would typically require authentication, but for now just return basic stats
    const stats = {
      processed: messageInterceptor?.processedMessages?.size || 0,
      uptime: process.uptime(),
      timestamp: new Date()
    }
    
    res.json({
      success: true,
      stats
    })
  } catch (error) {
    console.error('[SCANNER] Stats error:', error)
    res.status(500).json({
      success: false,
      error: error.message
    })
  }
})

// Integration guide endpoint
router.get('/integration-guide', (req, res) => {
  res.json({
    success: true,
    integration: {
      endpoint: '/api/scan-message',
      method: 'POST',
      example: {
        message: 'User message to scan',
        userId: 'user123',
        sessionId: 'session456',
        ip: '192.168.1.1',
        userAgent: 'Mozilla/5.0...',
        userProfile: {}
      },
      response: {
        success: true,
        result: {
          processed: true,
          blocked: false,
          violations: [],
          alertsCreated: 0
        }
      }
    },
    codeExample: MessageInterceptor.createIntegrationCode()
  })
})

module.exports = router