// RA-H OS Bridge Schema Validation Middleware function validateNodePayload(payload) { const errors = []; const required = ['tenant', 'namespace', 'type', 'visibility', 'state', 'captured_by']; const defaults = { tenant: 'syslogsolution', namespace: 'syslogsolution', type: 'note', visibility: 'shared', state: 'not_processed', captured_by: 'agent' }; for (const field of required) { payload.metadata = payload.metadata || {}; if (!payload.metadata[field]) { if (defaults[field]) payload.metadata[field] = defaults[field]; else errors.push('Missing required field: ' + field); } } // Also ensure source_metadata exists for compatibility if (!payload.metadata.source_metadata) { payload.metadata.source_metadata = {}; } return errors; } function validateEdgePayload(payload) { const errors = []; if (!payload.explanation) { if (payload.context?.explanation) payload.explanation = payload.context.explanation; else errors.push('Missing required field: explanation'); } return errors; } function validationMiddleware(operation, payload) { let errors = []; if (['createNode', 'updateNode'].includes(operation)) errors = validateNodePayload(payload); else if (operation === 'createEdge') errors = validateEdgePayload(payload); if (errors.length > 0) { console.error('[BRIDGE_VALIDATION] ' + operation + ' rejected:', { errors: errors, timestamp: new Date().toISOString() }); return { success: false, errors: errors }; } return { success: true, payload: payload }; } module.exports = { validationMiddleware };