UNPKG

mcp-product-manager

Version:

MCP Orchestrator for task and project management with web interface

107 lines 2.68 kB
/** * Response utility functions for Express routes - TypeScript version */ /** * Standard success response * Returns data object that can be sent with res.json() */ export const success = (data = {}, message) => { const response = { success: true, data, metadata: { timestamp: new Date().toISOString() } }; // Add message to metadata if provided if (message) { response.metadata.message = message; } return response; }; /** * Standard error response * Returns error object that can be sent with res.status().json() */ export const error = (message = 'An error occurred', statusCode = 500, details = null) => { const response = { status: statusCode, body: { success: false, error: message } }; if (details) { response.body.details = details; } return response; }; /** * Async route handler wrapper to catch errors * Type-safe wrapper for async Express route handlers */ export const asyncHandler = (fn) => { return (req, res, next) => { Promise.resolve(fn(req, res, next)).catch(next); }; }; /** * Validation error response */ export const validationError = (errors) => { return error('Validation failed', 400, { errors }); }; /** * Not found response */ export const notFound = (resource = 'Resource') => { return error(`${resource} not found`, 404); }; /** * Unauthorized response */ export const unauthorized = (message = 'Unauthorized') => { return error(message, 401); }; /** * Forbidden response */ export const forbidden = (message = 'Forbidden') => { return error(message, 403); }; /** * Rate limit exceeded response */ export const rateLimitExceeded = (retryAfter) => { const details = retryAfter ? { retryAfter } : undefined; return error('Rate limit exceeded', 429, details); }; /** * Service unavailable response */ export const serviceUnavailable = (message = 'Service temporarily unavailable') => { return error(message, 503); }; /** * Helper to send success response */ export const sendSuccess = (res, data, message) => { return res.json(success(data, message)); }; /** * Helper to send error response */ export const sendError = (res, errorResponse) => { return res.status(errorResponse.status).json(errorResponse.body); }; /** * Type guard to check if response is an error */ export const isErrorResponse = (response) => { return response && typeof response === 'object' && 'status' in response && 'body' in response && response.body?.success === false; }; //# sourceMappingURL=response.js.map