UNPKG

@mseep/mcp-server-aws-sso

Version:

Node.js/TypeScript MCP server for AWS Single Sign-On (SSO). Enables AI systems (LLMs) with tools to initiate SSO login (device auth flow), list accounts/roles, and securely execute AWS CLI commands using temporary credentials. Streamlines AI interaction w

147 lines (146 loc) 4.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.McpError = exports.ErrorType = void 0; exports.createAuthMissingError = createAuthMissingError; exports.createAuthInvalidError = createAuthInvalidError; exports.createAuthTimeoutError = createAuthTimeoutError; exports.createApiError = createApiError; exports.createUnexpectedError = createUnexpectedError; exports.ensureMcpError = ensureMcpError; exports.formatErrorForMcpTool = formatErrorForMcpTool; exports.formatErrorForMcpResource = formatErrorForMcpResource; exports.handleCliError = handleCliError; const logger_util_js_1 = require("./logger.util.js"); /** * Error types for classification */ var ErrorType; (function (ErrorType) { ErrorType["AUTH_MISSING"] = "AUTH_MISSING"; ErrorType["AUTH_INVALID"] = "AUTH_INVALID"; ErrorType["API_ERROR"] = "API_ERROR"; ErrorType["UNEXPECTED_ERROR"] = "UNEXPECTED_ERROR"; })(ErrorType || (exports.ErrorType = ErrorType = {})); /** * Custom error class with type classification */ class McpError extends Error { constructor(message, type, statusCode, originalError) { super(message); this.name = 'McpError'; this.type = type; this.statusCode = statusCode; this.originalError = originalError; } } exports.McpError = McpError; /** * Create an authentication missing error */ function createAuthMissingError(message = 'Authentication credentials are missing') { return new McpError(message, ErrorType.AUTH_MISSING); } /** * Create an authentication invalid error */ function createAuthInvalidError(message = 'Authentication credentials are invalid') { return new McpError(message, ErrorType.AUTH_INVALID, 401); } /** * Create an authentication timeout error */ function createAuthTimeoutError(message = 'Authentication timed out') { return new McpError(message, ErrorType.AUTH_INVALID, 408); } /** * Create an API error */ function createApiError(message, statusCode, originalError) { return new McpError(message, ErrorType.API_ERROR, statusCode, originalError); } /** * Create an unexpected error */ function createUnexpectedError(message = 'An unexpected error occurred', originalError) { return new McpError(message, ErrorType.UNEXPECTED_ERROR, undefined, originalError); } /** * Ensure an error is an McpError */ function ensureMcpError(error) { if (error instanceof McpError) { return error; } if (error instanceof Error) { return createUnexpectedError(error.message, error); } return createUnexpectedError(String(error)); } /** * Format error for MCP tool response */ function formatErrorForMcpTool(error) { const methodLogger = logger_util_js_1.Logger.forContext('utils/error.util.ts', 'formatErrorForMcpTool'); const mcpError = ensureMcpError(error); methodLogger.error(`${mcpError.type} error`, mcpError); return { content: [ { type: 'text', text: `Error: ${mcpError.message}`, }, ], }; } /** * Format error for MCP resource response */ function formatErrorForMcpResource(error, uri) { const methodLogger = logger_util_js_1.Logger.forContext('utils/error.util.ts', 'formatErrorForMcpResource'); const mcpError = ensureMcpError(error); methodLogger.error(`${mcpError.type} error`, mcpError); return { contents: [ { uri, text: `Error: ${mcpError.message}`, mimeType: 'text/plain', description: `Error: ${mcpError.type}`, }, ], }; } /** * Handle error in CLI context * @param error The error to handle * @param source Optional source information for better error messages */ function handleCliError(error, source) { const methodLogger = logger_util_js_1.Logger.forContext('utils/error.util.ts', 'handleCliError'); const mcpError = ensureMcpError(error); // Log detailed information at different levels based on error type if (mcpError.statusCode && mcpError.statusCode >= 500) { methodLogger.error(`${mcpError.type} error occurred`, { message: mcpError.message, statusCode: mcpError.statusCode, source, stack: mcpError.stack, }); } else { methodLogger.warn(`${mcpError.type} error occurred`, { message: mcpError.message, statusCode: mcpError.statusCode, source, }); } // Log additional debug information if DEBUG is enabled methodLogger.debug('Error details', { type: mcpError.type, statusCode: mcpError.statusCode, originalError: mcpError.originalError, stack: mcpError.stack, }); console.error(`Error: ${mcpError.message}`); process.exit(1); }