Skip to main content
Glama
config.tsβ€’4.15 kB
import { Router, Request, Response } from 'express'; import { MemAgent } from '@core/brain/memAgent/index.js'; import { successResponse, errorResponse, ERROR_CODES } from '../utils/response.js'; import { redactSensitiveData } from '../utils/security.js'; import { logger } from '@core/logger/index.js'; import { dump as yamlDump } from 'js-yaml'; export function createConfigRoutes(agent: MemAgent): Router { const router = Router(); /** * GET /api/config.yaml * Export current configuration as YAML with sensitive data redacted */ router.get('/yaml', async (req: Request, res: Response) => { try { logger.info('Exporting configuration as YAML', { requestId: req.requestId }); // Get effective configuration const config = agent.getEffectiveConfig(); // Redact sensitive information const redactedConfig = redactSensitiveData(config); // Convert to YAML const yamlConfig = yamlDump(redactedConfig, { indent: 2, lineWidth: 120, noRefs: true, }); // Set appropriate headers for YAML response res.setHeader('Content-Type', 'application/x-yaml; charset=utf-8'); res.setHeader('Content-Disposition', 'attachment; filename="cipher-config.yml"'); res.setHeader('X-Request-ID', req.requestId); res.send(yamlConfig); } catch (error) { const errorMsg = error instanceof Error ? error.message : String(error); logger.error('Failed to export configuration', { requestId: req.requestId, error: errorMsg, }); errorResponse( res, ERROR_CODES.INTERNAL_ERROR, `Failed to export configuration: ${errorMsg}`, 500, undefined, req.requestId ); } }); /** * GET /api/config * Get current configuration as JSON with sensitive data redacted */ router.get('/', async (req: Request, res: Response) => { try { logger.info('Getting current configuration', { requestId: req.requestId }); // Get effective configuration const config = agent.getEffectiveConfig(); // Redact sensitive information const redactedConfig = redactSensitiveData(config); successResponse( res, { config: redactedConfig, timestamp: new Date().toISOString(), }, 200, req.requestId ); } catch (error) { const errorMsg = error instanceof Error ? error.message : String(error); logger.error('Failed to get configuration', { requestId: req.requestId, error: errorMsg, }); errorResponse( res, ERROR_CODES.INTERNAL_ERROR, `Failed to get configuration: ${errorMsg}`, 500, undefined, req.requestId ); } }); /** * GET /api/config/session/:sessionId * Get session-specific configuration */ router.get('/session/:sessionId', async (req: Request, res: Response) => { try { const { sessionId } = req.params; if (!sessionId) { errorResponse( res, ERROR_CODES.BAD_REQUEST, 'Session ID is required', 400, undefined, req.requestId ); return; } logger.info('Getting session-specific configuration', { requestId: req.requestId, sessionId, }); // Check if session exists const session = await agent.getSession(sessionId); if (!session) { errorResponse( res, ERROR_CODES.SESSION_NOT_FOUND, `Session ${sessionId} not found`, 404, undefined, req.requestId ); return; } // Get session-specific configuration const config = agent.getEffectiveConfig(sessionId); // Redact sensitive information const redactedConfig = redactSensitiveData(config); successResponse( res, { sessionId, config: redactedConfig, timestamp: new Date().toISOString(), }, 200, req.requestId ); } catch (error) { const errorMsg = error instanceof Error ? error.message : String(error); logger.error('Failed to get session configuration', { requestId: req.requestId, sessionId: req.params.sessionId, error: errorMsg, }); errorResponse( res, ERROR_CODES.INTERNAL_ERROR, `Failed to get session configuration: ${errorMsg}`, 500, undefined, req.requestId ); } }); return router; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/campfirein/cipher'

If you have feedback or need assistance with the MCP directory API, please join our Discord server