|
| 1 | +import { z } from "zod"; |
| 2 | +import { |
| 3 | + createErrorResponse, |
| 4 | + formatZodError, |
| 5 | + handleGeneralError, |
| 6 | +} from "./util.js"; |
| 7 | + |
| 8 | +// Import all tool handlers |
| 9 | +import { |
| 10 | + handleCloudIncidentsRequest, |
| 11 | + handleCloudIncidentRequest, |
| 12 | +} from "../tools/cloudIncidents.js"; |
| 13 | +import { |
| 14 | + handleAnomaliesRequest, |
| 15 | + handleAnomalyRequest, |
| 16 | +} from "../tools/anomalies.js"; |
| 17 | +import { |
| 18 | + handleReportsRequest, |
| 19 | + handleRunQueryRequest, |
| 20 | + handleGetReportResultsRequest, |
| 21 | +} from "../tools/reports.js"; |
| 22 | +import { handleValidateUserRequest } from "../tools/validateUser.js"; |
| 23 | +import { handleDimensionsRequest } from "../tools/dimensions.js"; |
| 24 | +import { handleDimensionRequest } from "../tools/dimension.js"; |
| 25 | +import { |
| 26 | + handleListTicketsRequest, |
| 27 | + handleCreateTicketRequest, |
| 28 | +} from "../tools/tickets.js"; |
| 29 | +import { |
| 30 | + handleListInvoicesRequest, |
| 31 | + handleGetInvoiceRequest, |
| 32 | +} from "../tools/invoices.js"; |
| 33 | + |
| 34 | +/** |
| 35 | + * Executes a tool handler with proper error handling |
| 36 | + * @param toolName - The name of the tool to execute |
| 37 | + * @param args - The arguments to pass to the tool handler |
| 38 | + * @param token - The API token to use |
| 39 | + * @param convertResponse - Optional function to convert the response format |
| 40 | + * @returns The tool execution result |
| 41 | + */ |
| 42 | +export async function executeToolHandler( |
| 43 | + toolName: string, |
| 44 | + args: any, |
| 45 | + token: string, |
| 46 | + convertResponse?: (response: any) => any |
| 47 | +): Promise<any> { |
| 48 | + try { |
| 49 | + let result: any; |
| 50 | + |
| 51 | + switch (toolName) { |
| 52 | + case "get_cloud_incidents": |
| 53 | + result = await handleCloudIncidentsRequest(args, token); |
| 54 | + break; |
| 55 | + case "get_cloud_incident": |
| 56 | + result = await handleCloudIncidentRequest(args, token); |
| 57 | + break; |
| 58 | + case "get_anomalies": |
| 59 | + result = await handleAnomaliesRequest(args, token); |
| 60 | + break; |
| 61 | + case "get_anomaly": |
| 62 | + result = await handleAnomalyRequest(args, token); |
| 63 | + break; |
| 64 | + case "list_reports": |
| 65 | + result = await handleReportsRequest(args, token); |
| 66 | + break; |
| 67 | + case "run_query": |
| 68 | + result = await handleRunQueryRequest(args, token); |
| 69 | + break; |
| 70 | + case "get_report_results": |
| 71 | + result = await handleGetReportResultsRequest(args, token); |
| 72 | + break; |
| 73 | + case "validate_user": |
| 74 | + result = await handleValidateUserRequest(args, token); |
| 75 | + break; |
| 76 | + case "list_dimensions": |
| 77 | + result = await handleDimensionsRequest(args, token); |
| 78 | + break; |
| 79 | + case "get_dimension": |
| 80 | + result = await handleDimensionRequest(args, token); |
| 81 | + break; |
| 82 | + case "list_tickets": |
| 83 | + result = await handleListTicketsRequest(args, token); |
| 84 | + break; |
| 85 | + case "create_ticket": |
| 86 | + result = await handleCreateTicketRequest(args, token); |
| 87 | + break; |
| 88 | + case "list_invoices": |
| 89 | + result = await handleListInvoicesRequest(args, token); |
| 90 | + break; |
| 91 | + case "get_invoice": |
| 92 | + result = await handleGetInvoiceRequest(args, token); |
| 93 | + break; |
| 94 | + default: |
| 95 | + return createErrorResponse(`Unknown tool: ${toolName}`); |
| 96 | + } |
| 97 | + |
| 98 | + // Apply response conversion if provided |
| 99 | + return convertResponse ? convertResponse(result) : result; |
| 100 | + } catch (error) { |
| 101 | + if (error instanceof z.ZodError) { |
| 102 | + const errorResult = createErrorResponse(formatZodError(error)); |
| 103 | + return convertResponse ? convertResponse(errorResult) : errorResult; |
| 104 | + } |
| 105 | + const errorResult = handleGeneralError(error, "handling tool request"); |
| 106 | + return convertResponse ? convertResponse(errorResult) : errorResult; |
| 107 | + } |
| 108 | +} |
0 commit comments