UNPKG

firewalla-mcp-server

Version:

Model Context Protocol (MCP) server for Firewalla MSP API - Provides real-time network monitoring, security analysis, and firewall management through 28 specialized tools compatible with any MCP client

50 lines 2.21 kB
/** * Simple Boolean Translator for Firewalla MCP Server * * Replaces the over-engineered BooleanFieldTranslator with a minimal solution * that solves only the documented problem: Firewalla API requires "blocked:1" not "blocked:true" * * Philosophy: OSS elegance over complexity, solve real problems minimally */ /** * Boolean fields that need translation for each entity type */ const BOOLEAN_FIELDS = { flows: ['blocked', 'allowed', 'encrypted', 'compressed'], alarms: ['resolved', 'acknowledged', 'dismissed', 'active'], rules: ['active', 'enabled', 'disabled', 'paused'], devices: ['online', 'monitored', 'blocked', 'trusted'], }; /** * Translate boolean queries to Firewalla API format * * Problem: Firewalla API fails with "blocked:true" but works with "blocked:1" * Solution: Simple regex replacement for documented boolean fields * * @param query - Query string (e.g., "blocked:true AND protocol:tcp") * @param entityType - Entity type (flows, alarms, rules, devices) * @returns Translated query string */ export function translateBooleanQuery(query, entityType) { if (!query || typeof query !== 'string') { return query; } const booleanFields = BOOLEAN_FIELDS[entityType]; if (!booleanFields) { return query; // No translation for unknown entity types } let translatedQuery = query; // Simple regex replacement for each boolean field for (const field of booleanFields) { // Replace "field:true" with "field:1" translatedQuery = translatedQuery.replace(new RegExp(`\\b${field}:true\\b`, 'gi'), `${field}:1`); // Replace "field:false" with "field:0" translatedQuery = translatedQuery.replace(new RegExp(`\\b${field}:false\\b`, 'gi'), `${field}:0`); // Replace "field=true" with "field:1" (equals syntax support) translatedQuery = translatedQuery.replace(new RegExp(`\\b${field}=true\\b`, 'gi'), `${field}:1`); // Replace "field=false" with "field:0" (equals syntax support) translatedQuery = translatedQuery.replace(new RegExp(`\\b${field}=false\\b`, 'gi'), `${field}:0`); } return translatedQuery; } //# sourceMappingURL=simple-boolean-translator.js.map