{"version":3,"sources":["../../src/errors/index.ts","../../src/client/paths.ts","../../src/client/arrow-ipc.ts"],"names":["ArrowConnectionStatus","encoder"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Base error class for all MCP SDK errors\n */\nexport class MCPError extends Error {\n  status?: number;\n  code?: string;\n  cause?: unknown;\n\n  constructor(message: string, options?: { status?: number; code?: string; cause?: unknown }) {\n    super(message);\n    this.name = 'MCPError';\n    this.status = options?.status;\n    this.code = options?.code;\n    this.cause = options?.cause;\n\n    // Ensures proper prototype chain for instanceof checks\n    Object.setPrototypeOf(this, MCPError.prototype);\n  }\n\n  /**\n   * Creates a formatted error message with all available details\n   */\n  toFormattedString(): string {\n    const parts = [\n      `[${this.name}] ${this.message}`,\n      this.code ? `Code: ${this.code}` : null,\n      this.status ? `Status: ${this.status}` : null,\n      this.cause ? `Cause: ${this.cause instanceof Error ? this.cause.message : String(this.cause)}` : null,\n    ].filter(Boolean);\n\n    return parts.join(' | ');\n  }\n}\n\n/**\n * Error thrown when there's a network-related issue\n */\nexport class NetworkError extends MCPError {\n  constructor(message: string, options?: { code?: string; cause?: unknown }) {\n    super(message, { status: 0, code: options?.code || 'NETWORK_ERROR', cause: options?.cause });\n    this.name = 'NetworkError';\n\n    Object.setPrototypeOf(this, NetworkError.prototype);\n  }\n}\n\n/**\n * Error thrown when a request times out\n */\nexport class TimeoutError extends MCPError {\n  constructor(message = 'Request timed out', options?: { code?: string; cause?: unknown }) {\n    super(message, { status: 0, code: options?.code || 'TIMEOUT', cause: options?.cause });\n    this.name = 'TimeoutError';\n\n    Object.setPrototypeOf(this, TimeoutError.prototype);\n  }\n}\n\n/**\n * Error thrown when a request receives a 4xx or 5xx response\n */\nexport class HTTPError extends MCPError {\n  response: Response;\n\n  constructor(message: string, response: Response, options?: { code?: string; cause?: unknown }) {\n    super(message, {\n      status: response.status,\n      code: options?.code || `HTTP_${response.status}`,\n      cause: options?.cause\n    });\n    this.name = 'HTTPError';\n    this.response = response;\n\n    Object.setPrototypeOf(this, HTTPError.prototype);\n  }\n}\n\n/**\n * Error thrown when there's an authentication or authorization issue\n */\nexport class AuthError extends MCPError {\n  response?: Response;\n\n  constructor(message: string, options?: { status?: number; code?: string; cause?: unknown; response?: Response }) {\n    super(message, {\n      status: options?.status || 401,\n      code: options?.code || 'AUTH_ERROR',\n      cause: options?.cause\n    });\n    this.name = 'AuthError';\n    this.response = options?.response;\n\n    Object.setPrototypeOf(this, AuthError.prototype);\n  }\n}\n\n/**\n * Error thrown when user is unauthorized to access a resource\n */\nexport class UnauthorizedError extends AuthError {\n  constructor(message: string, options?: { code?: string; cause?: unknown; response?: Response }) {\n    super(message, {\n      status: 401,\n      code: options?.code || 'UNAUTHORIZED',\n      cause: options?.cause,\n      response: options?.response\n    });\n    this.name = 'UnauthorizedError';\n\n    Object.setPrototypeOf(this, UnauthorizedError.prototype);\n  }\n}\n\n/**\n * Error thrown when a tenant is not found\n */\nexport class TenantNotFoundError extends HTTPError {\n  constructor(message: string, options?: { code?: string; cause?: unknown }) {\n    // Create a mock Response object since we don't have the actual one\n    const mockResponse = new Response(null, { status: 404 });\n    \n    super(message, mockResponse, {\n      code: options?.code || 'TENANT_NOT_FOUND',\n      cause: options?.cause\n    });\n    this.name = 'TenantNotFoundError';\n\n    Object.setPrototypeOf(this, TenantNotFoundError.prototype);\n  }\n}\n\n/**\n * Error thrown when there's an issue with WebSocket connection\n */\nexport class WebSocketError extends MCPError {\n  event?: Event;\n\n  constructor(message: string, options?: { event?: Event; code?: string; cause?: unknown }) {\n    super(message, {\n      code: options?.code || 'WEBSOCKET_ERROR',\n      cause: options?.cause\n    });\n    this.name = 'WebSocketError';\n    this.event = options?.event;\n\n    Object.setPrototypeOf(this, WebSocketError.prototype);\n  }\n}\n\n/**\n * Error thrown when there's an issue with parsing a response\n */\nexport class ParseError extends MCPError {\n  data?: unknown;\n\n  constructor(message: string, options?: { data?: unknown; code?: string; cause?: unknown }) {\n    super(message, {\n      code: options?.code || 'PARSE_ERROR',\n      cause: options?.cause\n    });\n    this.name = 'ParseError';\n    this.data = options?.data;\n\n    Object.setPrototypeOf(this, ParseError.prototype);\n  }\n}\n\n/**\n * Error thrown when validation fails (e.g., with zod or other validators)\n */\nexport class ValidationError extends MCPError {\n  errors?: unknown;\n\n  constructor(message: string, options?: { errors?: unknown; code?: string; cause?: unknown }) {\n    super(message, {\n      code: options?.code || 'VALIDATION_ERROR',\n      cause: options?.cause\n    });\n    this.name = 'ValidationError';\n    this.errors = options?.errors;\n\n    Object.setPrototypeOf(this, ValidationError.prototype);\n  }\n}\n\n/**\n * Create appropriate error instance from an unknown error\n */\nexport function createError(error: unknown): MCPError {\n  if (error instanceof MCPError) {\n    return error;\n  }\n\n  if (error instanceof Error) {\n    return new MCPError(error.message, { cause: error });\n  }\n\n  return new MCPError(String(error));\n}\n\n// Export ontology error classes\nexport {\n  OntologyError,\n  OntologyEntityNotFoundError,\n  OntologySparqlError,\n  OntologyModificationError,\n  OntologyPaginationError,\n  parseOntologyError\n} from './ontology-errors';\n\n/**\n * Create appropriate HTTP error based on response status\n */\nexport function createHttpError(response: Response): MCPError {\n  const status = response.status;\n  let message = `HTTP Error ${status}`;\n  let code = `HTTP_${status}`;\n\n  // Add specific error messages for common HTTP status codes\n  if (status === 400) {\n    message = 'Bad Request: The request was invalid';\n    return new HTTPError(message, response);\n  } else if (status === 401) {\n    message = 'Unauthorized: Authentication is required';\n    return new AuthError(message, { status, code, response });\n  } else if (status === 403) {\n    message = 'Forbidden: You don\\'t have permission to access this resource';\n    return new AuthError(message, { status, code, response });\n  } else if (status === 404) {\n    message = 'Not Found: The requested resource does not exist';\n    return new HTTPError(message, response);\n  } else if (status === 429) {\n    message = 'Too Many Requests: Rate limit exceeded';\n    return new HTTPError(message, response);\n  } else if (status >= 500) {\n    message = 'Server Error: Something went wrong on the server';\n    return new HTTPError(message, response);\n  }\n\n  return new HTTPError(message, response);\n}\n","/**\n * Type-safe path parameter extraction\n * Extracts path parameters from a string literal type\n * e.g. \"/users/:id\" -> { id: string }\n */\nexport type PathParams<P extends string> = string extends P\n  ? Record<string, string>\n  : P extends `${infer _}:${infer Param}/${infer Rest}`\n  ? { [K in Param]: string } & PathParams<`/${Rest}`>\n  : P extends `${infer _}:${infer Param}`\n  ? { [K in Param]: string }\n  : {};\n\n/**\n * API Endpoints\n * Type-safe API endpoint definitions\n */\nexport const ApiEndpoints = {\n  // Ontology endpoints\n  Ontologies: '/ontologies' as const,\n  OntologyById: '/ontologies/:id' as const,\n\n  // User endpoints\n  CurrentUser: '/users/me' as const,\n  UserById: '/users/:id' as const,\n\n  // Authentication endpoints\n  Login: '/auth/login' as const,\n  Logout: '/auth/logout' as const,\n  RefreshToken: '/auth/refresh' as const,\n\n  // Tenant endpoints\n  CurrentTenant: '/tenants/current' as const,\n  TenantById: '/tenants/:id' as const,\n\n  // MCP context endpoints\n  ResolveContext: '/resolve' as const,\n  WebSocketResolve: '/resolve_ws' as const,\n\n  // Tools endpoints\n  ToolsList: '/tools/list' as const,\n  ToolsExecute: '/tools/execute' as const,\n  ToolsStream: '/tools/stream' as const,\n\n  // JSON-RPC endpoint\n  JsonRPC: '/mcp' as const\n};\n\n/**\n * Creates a URL path by replacing parameters in the path template\n *\n * @example\n * ```ts\n * const path = buildPath('/users/:id', { id: '123' }); // '/users/123'\n * ```\n */\nexport function buildPath(\n  pathTemplate: string,\n  params?: Record<string, string>\n): string {\n  if (!params) return pathTemplate;\n\n  let result = pathTemplate;\n\n  for (const [key, value] of Object.entries(params)) {\n    result = result.replace(`:${key}`, encodeURIComponent(String(value)));\n  }\n\n  return result;\n}\n\n/**\n * Creates a full URL by combining base URL with a path\n * @param baseUrl Base URL\n * @param path Path to append\n * @returns Full URL\n */\nexport function createFullUrl(baseUrl: string, path: string): string {\n  // Normalize baseUrl to ensure it doesn't end with a slash\n  const normalizedBaseUrl = baseUrl.endsWith('/')\n    ? baseUrl.slice(0, -1)\n    : baseUrl;\n\n  // Normalize path to ensure it starts with a slash\n  const normalizedPath = path.startsWith('/')\n    ? path\n    : `/${path}`;\n\n  return `${normalizedBaseUrl}${normalizedPath}`;\n}\n","/**\n * Arrow IPC over WebSocket transport implementation\n *\n * This file implements a client for the Arrow IPC protocol, allowing efficient\n * binary data transfer between client and server for large datasets.\n */\n\nimport { MCPOptions } from './types';\nimport { MCPError, WebSocketError } from '../errors';\nimport { createFullUrl } from './paths';\n\n// Import specific Arrow classes to fix type issues\nimport {\n  Field,\n  Schema,\n  Utf8,\n  Binary,\n  Int32,\n  Struct,\n  RecordBatch,\n  RecordBatchReader,\n  RecordBatchStreamWriter,\n  Table,\n  Vector\n} from 'apache-arrow';\n\n/**\n * RPC format used by MCP for JSON-RPC 2.0 style communication\n */\nexport interface MCPRPC {\n  jsonrpc: string;         // JSON-RPC version (always \"2.0\")\n  id?: string | number;    // Message ID for request/response matching\n  method?: string;         // Method to call\n  params?: any;            // Method parameters\n  result?: any;            // Method result\n  error?: {                // Error information\n    code: number;\n    message: string;\n    data?: any;\n  };\n}\n\n/**\n * Arrow IPC message structure\n */\nexport interface ArrowMessage extends MCPRPC {\n  binaryData?: Uint8Array; // Binary Arrow IPC data\n}\n\n/**\n * Arrow IPC event handlers\n */\nexport interface ArrowEventHandlers {\n  onOpen?: (event: Event) => void;\n  onMessage?: (message: ArrowMessage) => void;\n  onBinaryMessage?: (buffer: ArrayBuffer) => void;\n  onError?: (event: Event) => void;\n  onClose?: (event: CloseEvent) => void;\n  onStatusChange?: (status: ArrowConnectionStatus) => void;\n}\n\n/**\n * Arrow IPC connection status\n */\nexport enum ArrowConnectionStatus {\n  DISCONNECTED = 0,\n  CONNECTING = 1,\n  CONNECTED = 2,\n  CLOSING = 3,\n  ERROR = 4,\n  RECONNECTING = 5\n}\n\n/**\n * Arrow query options\n */\nexport interface ArrowQueryOptions {\n  format?: 'arrow' | 'json';  // Preferred response format\n  timeout?: number;          // Query timeout in milliseconds\n  maxRows?: number;          // Maximum number of rows to return\n}\n\n/**\n * Arrow stream consumer callback\n */\nexport type ArrowStreamConsumer = (chunk: Uint8Array) => void;\n\n/**\n * Arrow query result\n */\nexport interface ArrowQueryResult {\n  query: string;           // The executed query\n  schema: any;             // Arrow schema information\n  rowCount: number;        // Total number of rows\n  data?: ArrayBuffer;      // Arrow record batch data if available\n  json?: any[];            // JSON data if requested\n}\n\n/**\n * MCP Resource types\n */\nexport interface MCPResource {\n  uri: string;\n  name: string;\n  description?: string;\n}\n\n/**\n * MCP Resource content\n */\nexport interface MCPResourceContent {\n  uri: string;\n  text: string;\n  mimeType: string;\n}\n\n/**\n * MCP Tool schema\n */\nexport interface MCPToolSchema {\n  type: string;\n  properties: Record<string, any>;\n  required?: string[];\n}\n\n/**\n * MCP Tool definition\n */\nexport interface MCPTool {\n  id: string;\n  name: string;\n  description: string;\n  schema: MCPToolSchema;\n}\n\n/**\n * Server capabilities\n */\nexport interface MCPCapabilities {\n  protocolVersion: string;\n  capabilities: {\n    prompts?: any;\n    resources?: any;\n    tools?: any;\n    experimental?: any;\n  };\n  serverInfo: {\n    name: string;\n    version: string;\n  };\n}\n\n/**\n * Arrow IPC client for efficient binary data transfer\n */\nexport class MCPArrowClient {\n  private ws: WebSocket | null = null;\n  private baseUrl: string;\n  private apiKey?: string;\n  private token?: string;\n  private tenantId?: string;\n  private status: ArrowConnectionStatus = ArrowConnectionStatus.DISCONNECTED;\n  private handlers: ArrowEventHandlers = {};\n  private messageQueue: ArrowMessage[] = [];\n  private pendingRequests: Map<string, {\n    resolve: (result: any) => void,\n    reject: (error: Error) => void,\n    timer?: ReturnType<typeof setTimeout>\n  }> = new Map();\n  private defaultTimeout: number = 30000;\n  private reconnectAttempts: number = 0;\n  private maxReconnectAttempts: number = 5;\n  private reconnectDelay: number = 1000;\n  private autoReconnect: boolean = true;\n  private connectionPath: string = '/arrow';\n  private connectionRetryTimer: ReturnType<typeof setTimeout> | null = null;\n  private manualClose: boolean = false;\n  private lastConnectionTime: number = 0;\n  private nextMessageId: number = 1;\n  private streamTimeout?: number;\n  // Heartbeat properties\n  private heartbeatInterval: number = 15000; // 15 seconds\n  private heartbeatTimer: ReturnType<typeof setTimeout> | null = null;\n  private missedHeartbeats: number = 0;\n  private maxMissedHeartbeats: number = 3;\n  private lastHeartbeatResponse: number = 0;\n\n  /**\n   * Event listener map for custom events\n   */\n  private eventListeners: Map<string, Set<(message: ArrowMessage) => void>> = new Map();\n\n  /**\n   * Add an event listener for a specific event type\n   */\n  private addEventListener(event: string, handler: (message: ArrowMessage) => void): void {\n    if (!this.eventListeners.has(event)) {\n      this.eventListeners.set(event, new Set());\n    }\n    this.eventListeners.get(event)?.add(handler);\n  }\n\n  /**\n   * Remove an event listener\n   */\n  private removeEventListener(event: string, handler: (message: ArrowMessage) => void): void {\n    if (this.eventListeners.has(event)) {\n      this.eventListeners.get(event)?.delete(handler);\n    }\n  }\n\n  /**\n   * Trigger event handlers for a specific event\n   */\n  private triggerEvent(event: string, message: ArrowMessage): void {\n    if (this.eventListeners.has(event)) {\n      for (const handler of this.eventListeners.get(event) || []) {\n        try {\n          handler(message);\n        } catch (error) {\n          console.error(`Error in ${event} event handler:`, error);\n        }\n      }\n    }\n  }\n\n  /**\n   * Creates a new Arrow IPC client\n   */\n  constructor(options: MCPOptions & { autoReconnect?: boolean, maxReconnectAttempts?: number, streamTimeout?: number }) {\n    // Convert HTTP URL to WebSocket URL if needed\n    let wsBaseUrl = options.baseUrl || 'https://api.mcp.ai';\n    wsBaseUrl = wsBaseUrl.replace(/^http/, 'ws');\n\n    this.baseUrl = wsBaseUrl;\n    this.apiKey = options.apiKey;\n    this.token = options.token;\n    this.tenantId = options.tenantId;\n    this.autoReconnect = options.autoReconnect !== false;\n\n    if (options.maxReconnectAttempts !== undefined) {\n      this.maxReconnectAttempts = options.maxReconnectAttempts;\n    }\n\n    if (options.defaultTimeout) {\n      this.defaultTimeout = options.defaultTimeout;\n    }\n\n    if (options.streamTimeout) {\n      this.streamTimeout = options.streamTimeout;\n    }\n  }\n\n  /**\n   * Connect to the Arrow IPC WebSocket endpoint\n   */\n  connect(path: string = '/arrow', handlers: ArrowEventHandlers = {}): void {\n    if (this.ws && this.ws.readyState === WebSocket.OPEN) {\n      console.warn('Arrow WebSocket is already connected. Disconnect first to reconnect.');\n      return;\n    }\n\n    // Save the connection path for reconnection\n    this.connectionPath = path;\n\n    // Reset manual close flag\n    this.manualClose = false;\n\n    // Update status\n    this.setStatus(ArrowConnectionStatus.CONNECTING);\n\n    // Store handlers\n    this.handlers = handlers;\n\n    // Set last connection time\n    this.lastConnectionTime = Date.now();\n\n    // Create the full WebSocket URL\n    const url = new URL(createFullUrl(this.baseUrl, path));\n\n    // Add auth params as query parameters\n    if (this.apiKey) {\n      url.searchParams.append('apiKey', this.apiKey);\n    }\n    if (this.token) {\n      url.searchParams.append('token', this.token);\n    }\n    if (this.tenantId) {\n      url.searchParams.append('tenantId', this.tenantId);\n    }\n\n    // Create WebSocket\n    try {\n      this.ws = new WebSocket(url.toString());\n\n      // Set binary type to arraybuffer\n      this.ws.binaryType = 'arraybuffer';\n\n      // Set up event handlers\n      this.ws.onopen = this.handleOpen.bind(this);\n      this.ws.onmessage = this.handleMessage.bind(this);\n      this.ws.onerror = this.handleError.bind(this);\n      this.ws.onclose = this.handleClose.bind(this);\n    } catch (error) {\n      this.handleConnectionError(error);\n    }\n  }\n\n  /**\n   * Update and notify about status changes\n   */\n  private setStatus(newStatus: ArrowConnectionStatus): void {\n    if (this.status !== newStatus) {\n      this.status = newStatus;\n\n      // Notify handler if exists\n      if (this.handlers.onStatusChange) {\n        try {\n          this.handlers.onStatusChange(newStatus);\n        } catch (error) {\n          console.error('Error in Arrow status change handler:', error);\n        }\n      }\n    }\n  }\n\n  /**\n   * Handle WebSocket open event\n   */\n  private handleOpen(event: Event): void {\n    console.log('Arrow WebSocket connection opened');\n\n    // Update status\n    this.setStatus(ArrowConnectionStatus.CONNECTED);\n\n    // Reset reconnect attempts\n    this.reconnectAttempts = 0;\n\n    // Call the open handler\n    if (this.handlers.onOpen) {\n      try {\n        this.handlers.onOpen(event);\n      } catch (error) {\n        console.error('Error in Arrow open handler:', error);\n      }\n    }\n\n    // Process the message queue\n    this.processQueue();\n\n    // Start heartbeat\n    this.startHeartbeat();\n  }\n\n  /**\n   * Start heartbeat mechanism to keep connection alive\n   */\n  private startHeartbeat(): void {\n    // Clear any existing heartbeat timer\n    if (this.heartbeatTimer) {\n      clearTimeout(this.heartbeatTimer);\n      this.heartbeatTimer = null;\n    }\n\n    // Reset missed heartbeats counter\n    this.missedHeartbeats = 0;\n\n    // Start a new heartbeat timer\n    this.heartbeatTimer = setInterval(() => {\n      this.sendHeartbeat();\n    }, this.heartbeatInterval);\n\n    // Send an initial heartbeat immediately\n    this.sendHeartbeat();\n  }\n\n  /**\n   * Stop heartbeat mechanism\n   */\n  private stopHeartbeat(): void {\n    if (this.heartbeatTimer) {\n      clearTimeout(this.heartbeatTimer);\n      this.heartbeatTimer = null;\n    }\n  }\n\n  /**\n   * Send a heartbeat ping\n   */\n  private sendHeartbeat(): void {\n    // Only send if WebSocket is open\n    if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n      return;\n    }\n\n    // Check if we've missed too many heartbeats\n    if (this.missedHeartbeats >= this.maxMissedHeartbeats) {\n      console.warn(`Missed ${this.missedHeartbeats} heartbeats, reconnecting...`);\n\n      // Force close and reconnect\n      try {\n        this.ws.close();\n      } catch (e) {\n        console.error('Error closing WebSocket during heartbeat failure:', e);\n      }\n\n      // Attempt to reconnect if allowed\n      if (this.autoReconnect && !this.manualClose) {\n        this.attemptReconnect();\n      }\n\n      return;\n    }\n\n    // Increment missed heartbeats (will be reset when we get a response)\n    this.missedHeartbeats++;\n\n    // Send ping message\n    try {\n      console.debug('Ping sent');\n\n      const pingMessage = {\n        jsonrpc: '2.0',\n        method: 'ping',\n        id: `ping-${Date.now()}`\n      };\n\n      this.ws.send(JSON.stringify(pingMessage));\n    } catch (error) {\n      console.error('Error sending heartbeat:', error);\n    }\n  }\n\n  /**\n   * Handle a WebSocket message event\n   */\n  private handleMessage(event: MessageEvent): void {\n    try {\n      // Reset missed heartbeats on any message received\n      this.missedHeartbeats = 0;\n      this.lastHeartbeatResponse = Date.now();\n\n      // Check if we have a binary message\n      if (event.data instanceof ArrayBuffer) {\n        // Log received binary data\n        const dataSize = event.data.byteLength;\n        console.log(`Received binary data (${dataSize} bytes)`);\n\n        // If we have a binary message handler, call it directly with the raw data\n        if (this.handlers.onBinaryMessage) {\n          try {\n            this.handlers.onBinaryMessage(event.data);\n          } catch (error) {\n            console.error('Error in binary message handler:', error);\n          }\n        }\n\n        try {\n          // Decode the Arrow IPC message\n          const message = this.decodeMessage(event.data);\n\n          // For ping messages, send a pong response\n          if (message.method === 'ping') {\n            if (this.ws && this.ws.readyState === WebSocket.OPEN) {\n              // Respond with a pong message\n              const pongMessage = {\n                jsonrpc: '2.0',\n                method: 'pong',\n                id: message.id\n              };\n\n              try {\n                this.ws.send(JSON.stringify(pongMessage));\n              } catch (e) {\n                console.warn('Failed to send pong response:', e);\n              }\n            }\n\n            // Skip further processing for ping messages\n            return;\n          }\n\n          // Check for error messages and log them\n          if (message.error) {\n            console.warn('Received error message:', message.error);\n          }\n\n          // Trigger any event listeners for the 'message' event\n          this.triggerEvent('message', message);\n\n          // Process the decoded message\n          this.processMessage(message);\n        } catch (decodeError) {\n          console.error('Error decoding binary message:', decodeError);\n        }\n      } else if (typeof event.data === 'string') {\n        // Handle plain text messages (JSON)\n        try {\n          const message = JSON.parse(event.data) as ArrowMessage;\n\n          // If it's a pong message, we don't need to process it further\n          if (message.method === 'pong' ||\n              (message.id && String(message.id).startsWith('ping-'))) {\n            // Just a heartbeat response, no need for further processing\n            console.debug('Pong received');\n            return;\n          }\n\n          // Trigger message handlers\n          if (this.handlers.onMessage) {\n            try {\n              this.handlers.onMessage(message);\n            } catch (error) {\n              console.error('Error in message handler:', error);\n            }\n          }\n\n          // Trigger any event listeners for the 'message' event\n          this.triggerEvent('message', message);\n\n          // Process the message\n          this.processMessage(message);\n        } catch (error) {\n          console.error('Error parsing JSON message:', error, 'Raw data:', event.data);\n        }\n      } else {\n        console.warn('Received unsupported message type:', typeof event.data);\n      }\n    } catch (error) {\n      console.error('Error handling WebSocket message:', error);\n    }\n  }\n\n  /**\n   * Handle WebSocket error event\n   */\n  private handleError(event: Event): void {\n    console.error('Arrow WebSocket error:', event);\n\n    // Update status\n    this.setStatus(ArrowConnectionStatus.ERROR);\n\n    // Call the error handler\n    if (this.handlers.onError) {\n      try {\n        this.handlers.onError(event);\n      } catch (error) {\n        console.error('Error in Arrow error handler:', error);\n      }\n    }\n\n    // Attempt to reconnect if allowed\n    if (this.autoReconnect && !this.manualClose) {\n      this.attemptReconnect();\n    }\n  }\n\n  /**\n   * Handle WebSocket close event\n   */\n  private handleClose(event: CloseEvent): void {\n    console.log('Arrow WebSocket connection closed:', event);\n\n    // Update status\n    this.setStatus(ArrowConnectionStatus.DISCONNECTED);\n\n    // Stop heartbeat\n    this.stopHeartbeat();\n\n    // Call the close handler\n    if (this.handlers.onClose) {\n      try {\n        this.handlers.onClose(event);\n      } catch (error) {\n        console.error('Error in Arrow close handler:', error);\n      }\n    }\n\n    // Reject all pending requests\n    for (const [id, request] of this.pendingRequests.entries()) {\n      this.pendingRequests.delete(id);\n\n      if (request.timer) {\n        clearTimeout(request.timer);\n      }\n\n      request.reject(new WebSocketError('Connection closed', {\n        code: `CLOSE_${event.code}`,\n        cause: event\n      }));\n    }\n\n    // Attempt to reconnect if allowed and not cleanly closed\n    if (this.autoReconnect && !this.manualClose && event.code !== 1000) {\n      this.attemptReconnect();\n    }\n  }\n\n  /**\n   * Handle connection error\n   */\n  private handleConnectionError(error: any): void {\n    console.error('Arrow WebSocket connection error:', error);\n\n    // Update status\n    this.setStatus(ArrowConnectionStatus.ERROR);\n\n    // Attempt to reconnect if allowed\n    if (this.autoReconnect && !this.manualClose) {\n      this.attemptReconnect();\n    }\n  }\n\n  /**\n   * Send a message over the WebSocket\n   */\n  private async sendArrowMessage(message: MCPRPC): Promise<any> {\n    // Generate a unique message ID if not provided\n    if (message.id === undefined) {\n      message.id = this.nextMessageId++;\n    }\n\n    // Ensure we're working with strings for message IDs in the map\n    const id = String(message.id);\n\n    return new Promise((resolve, reject) => {\n      // Check if the WebSocket is open\n      if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n        // Queue the message for later\n        this.queueMessage({\n          ...message\n        });\n\n        // Set up a timer for the request\n        const timer = setTimeout(() => {\n          // Remove from pending requests\n          this.pendingRequests.delete(id);\n\n          // Reject with timeout error\n          reject(new WebSocketError('WebSocket not connected', {\n            code: 'CONNECTION_ERROR',\n          }));\n        }, this.defaultTimeout);\n\n        // Add to pending requests\n        this.pendingRequests.set(id, {\n          resolve,\n          reject,\n          timer,\n        });\n\n        // Try to reconnect if allowed\n        if (this.status !== ArrowConnectionStatus.CONNECTING && this.autoReconnect && !this.manualClose) {\n          this.attemptReconnect();\n        }\n\n        return;\n      }\n\n      try {\n        // Convert message to Arrow format - this would require proper Arrow serialization\n        const data = this.encodeMessage(message);\n\n        // Set up a timer for the request\n        const timer = setTimeout(() => {\n          // Remove from pending requests\n          this.pendingRequests.delete(id);\n\n          // Reject with timeout error\n          reject(new MCPError('Request timed out', {\n            code: 'TIMEOUT',\n          }));\n        }, this.defaultTimeout);\n\n        // Add to pending requests\n        this.pendingRequests.set(id, {\n          resolve,\n          reject,\n          timer,\n        });\n\n        // Send the bytes\n        this.ws.send(data);\n      } catch (error) {\n        reject(new MCPError('Failed to send message', {\n          cause: error,\n        }));\n      }\n    });\n  }\n\n  /**\n   * Encode a message to binary format\n   */\n  private encodeMessage(message: MCPRPC): ArrayBuffer {\n    try {\n      // Check if we already have binary data to send\n      if ('binaryData' in message &&\n          (message as ArrowMessage).binaryData instanceof Uint8Array &&\n          (message as ArrowMessage).binaryData) {\n        // If we have binary data, we need to create a composite message\n        // with JSON header and binary payload separated by a delimiter\n\n        // Convert the message to JSON without the binaryData\n        const { binaryData, ...jsonPart } = message as ArrowMessage & { binaryData: Uint8Array };\n        const jsonString = JSON.stringify(jsonPart);\n\n        // Create the header delimiter\n        const headerDelimiter = new Uint8Array([0, 65, 82, 82, 79, 87, 58]); // \\0ARROW:\n\n        // Convert the JSON string to a Uint8Array\n        const encoder = new TextEncoder();\n        const jsonBytes = encoder.encode(jsonString);\n\n        // Create the composite message buffer\n        const totalLength = jsonBytes.length + headerDelimiter.length + binaryData.length;\n        const result = new Uint8Array(totalLength);\n\n        // Copy the JSON part\n        result.set(jsonBytes, 0);\n\n        // Copy the delimiter\n        result.set(headerDelimiter, jsonBytes.length);\n\n        // Copy the binary data\n        result.set(binaryData, jsonBytes.length + headerDelimiter.length);\n\n        return result.buffer;\n      }\n\n      // If there's no binary data, just encode as JSON\n      const encoder = new TextEncoder();\n      const encodedData = encoder.encode(JSON.stringify(message));\n\n      // Use the binary JSON format for compatibility with more servers\n      return encodedData.buffer as ArrayBuffer;\n    } catch (error) {\n      console.error('Error encoding message:', error);\n      throw new MCPError('Failed to encode message', {\n        code: 'ENCODING_ERROR',\n        cause: error\n      });\n    }\n  }\n\n  /**\n   * Decode an Arrow IPC message from binary data\n   */\n  private decodeMessage(buffer: ArrayBuffer): ArrowMessage {\n    try {\n      // First try to decode as JSON text message (simpler approach)\n      const decoder = new TextDecoder();\n      const text = decoder.decode(new Uint8Array(buffer));\n\n      try {\n        // Try to parse as JSON\n        const jsonMessage = JSON.parse(text) as ArrowMessage;\n\n        // If we could parse it as JSON, use that\n        if (jsonMessage && typeof jsonMessage === 'object') {\n          return jsonMessage;\n        }\n      } catch (jsonError) {\n        // Not valid JSON, continue with binary approach\n        console.debug('Not valid JSON, trying binary parse');\n      }\n\n      // If we're here, it's likely an Arrow binary message\n      // We need to separate the metadata (JSON header) from the binary payload\n\n      // First, check if there's a header delimiter (null byte + \"ARROW:\")\n      const headerDelimiter = new Uint8Array([0, 65, 82, 82, 79, 87, 58]); // \\0ARROW:\n      const data = new Uint8Array(buffer);\n\n      // Log debug info about the binary data\n      console.debug(`Received binary data (${data.length} bytes)`);\n\n      // Search for the delimiter\n      let delimiterIndex = -1;\n      for (let i = 0; i <= data.length - headerDelimiter.length; i++) {\n        let match = true;\n        for (let j = 0; j < headerDelimiter.length; j++) {\n          if (data[i + j] !== headerDelimiter[j]) {\n            match = false;\n            break;\n          }\n        }\n        if (match) {\n          delimiterIndex = i;\n          break;\n        }\n      }\n\n      let message: ArrowMessage;\n\n      if (delimiterIndex > 0) {\n        // Extract and parse the JSON header part\n        const headerPart = new Uint8Array(buffer, 0, delimiterIndex);\n        const headerText = decoder.decode(headerPart);\n        try {\n          message = JSON.parse(headerText) as ArrowMessage;\n        } catch (e) {\n          console.error('Failed to parse Arrow IPC header:', e);\n          message = { jsonrpc: '2.0' };\n        }\n\n        // Extract the binary data part (skip the delimiter)\n        const binaryDataStart = delimiterIndex + headerDelimiter.length;\n        const binaryData = new Uint8Array(buffer, binaryDataStart);\n\n        // Attach the binary data to the message\n        message.binaryData = binaryData;\n      } else {\n        // No delimiter found, create a ping response message\n        // This handles server heartbeats and other binary data we can't parse\n\n        // Check if this might be a ping/pong message (typically very small)\n        if (data.length < 10) {\n          console.debug('Received likely heartbeat/ping message');\n          message = {\n            jsonrpc: '2.0',\n            method: 'ping',\n            id: String(Date.now())\n          };\n        } else {\n          // For larger unknown binary data, log more information for debugging\n          console.warn(`Received unrecognized binary format (${data.length} bytes): ${data.slice(0, 20)}`);\n\n          // Create a default message with the binary data attached\n          message = {\n            jsonrpc: '2.0',\n            id: String(Date.now()),\n            binaryData: data\n          };\n        }\n      }\n\n      return message;\n    } catch (error) {\n      console.error('Error decoding message:', error);\n      // Return a default message instead of throwing\n      return {\n        jsonrpc: '2.0',\n        error: {\n          code: -32700,\n          message: 'Failed to decode binary message'\n        }\n      };\n    }\n  }\n\n  /**\n   * Queue a message for later\n   */\n  private queueMessage(message: ArrowMessage): void {\n    console.log('Queueing message for later:', message);\n    this.messageQueue.push(message);\n\n    // Try to reconnect if allowed\n    if (this.status !== ArrowConnectionStatus.CONNECTING && this.autoReconnect && !this.manualClose) {\n      this.attemptReconnect();\n    }\n  }\n\n  /**\n   * Process the message queue\n   */\n  private processQueue(): void {\n    if (this.messageQueue.length === 0) {\n      return;\n    }\n\n    console.log(`Processing ${this.messageQueue.length} queued messages`);\n\n    const queue = [...this.messageQueue];\n    this.messageQueue = [];\n\n    for (const message of queue) {\n      // Send the message if possible\n      if (this.ws && this.ws.readyState === WebSocket.OPEN) {\n        this.sendArrowMessage(message).catch(console.error);\n      } else {\n        // Re-queue the message\n        this.messageQueue.push(message);\n      }\n    }\n  }\n\n  /**\n   * Attempt to reconnect to the WebSocket\n   */\n  private attemptReconnect(): void {\n    // Check if we've reached the maximum number of reconnect attempts\n    if (this.reconnectAttempts >= this.maxReconnectAttempts) {\n      console.error(`Maximum reconnect attempts (${this.maxReconnectAttempts}) reached. Giving up.`);\n      return;\n    }\n\n    // Check if we're already connecting or reconnecting\n    if (this.status === ArrowConnectionStatus.CONNECTING || this.status === ArrowConnectionStatus.RECONNECTING) {\n      return;\n    }\n\n    // Set status to reconnecting\n    this.setStatus(ArrowConnectionStatus.RECONNECTING);\n\n    // Calculate delay with exponential backoff\n    const delay = Math.min(this.reconnectDelay * Math.pow(1.5, this.reconnectAttempts), 30000);\n\n    // Increment reconnect attempts\n    this.reconnectAttempts++;\n\n    console.log(`Attempting to reconnect in ${delay}ms (attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts})`);\n\n    // Set up a timer for reconnection\n    this.connectionRetryTimer = setTimeout(() => {\n      this.connectionRetryTimer = null;\n      this.connect(this.connectionPath, this.handlers);\n    }, delay);\n  }\n\n  /**\n   * Generate a unique message ID\n   */\n  private generateMessageId(): number {\n    return this.nextMessageId++;\n  }\n\n  /**\n   * Get server capabilities\n   */\n  async getCapabilities(): Promise<MCPCapabilities> {\n    return this.sendArrowMessage({\n      jsonrpc: \"2.0\",\n      method: \"capabilities\",\n      params: {},\n      id: this.generateMessageId()\n    });\n  }\n\n  /**\n   * List available resources\n   */\n  async listResources(): Promise<{ resources: MCPResource[] }> {\n    return this.sendArrowMessage({\n      jsonrpc: \"2.0\",\n      method: \"listResources\",\n      params: {},\n      id: this.generateMessageId()\n    });\n  }\n\n  /**\n   * Get a specific resource\n   */\n  async getResource(uri: string): Promise<{ contents: MCPResourceContent[] }> {\n    return this.sendArrowMessage({\n      jsonrpc: \"2.0\",\n      method: \"getResource\",\n      params: { uri },\n      id: this.generateMessageId()\n    });\n  }\n\n  /**\n   * List available tools\n   */\n  async listTools(): Promise<{ tools: MCPTool[] }> {\n    return this.sendArrowMessage({\n      jsonrpc: \"2.0\",\n      method: \"listTools\",\n      params: {},\n      id: this.generateMessageId()\n    });\n  }\n\n  /**\n   * Get the current connection status\n   */\n  getStatus(): ArrowConnectionStatus {\n    return this.status;\n  }\n\n  /**\n   * Disconnect from the WebSocket\n   */\n  disconnect(): void {\n    if (!this.ws) {\n      return;\n    }\n\n    console.log('Disconnecting Arrow WebSocket');\n\n    // Set manual close flag\n    this.manualClose = true;\n\n    // Stop heartbeat\n    this.stopHeartbeat();\n\n    // Update status\n    this.setStatus(ArrowConnectionStatus.CLOSING);\n\n    try {\n      this.ws.close();\n    } catch (error) {\n      console.error('Error closing WebSocket:', error);\n    } finally {\n      this.ws = null;\n      this.setStatus(ArrowConnectionStatus.DISCONNECTED);\n    }\n\n    // Clear reconnect timer if exists\n    if (this.connectionRetryTimer) {\n      clearTimeout(this.connectionRetryTimer);\n      this.connectionRetryTimer = null;\n    }\n  }\n\n  /**\n   * Send a request to a model (like Claude) through the MCP server\n   */\n  async sendRequest(options: {\n    path: string;\n    method?: 'GET' | 'POST' | 'PUT' | 'DELETE';\n    body?: any;\n    responseType?: 'json' | 'arrow';\n    metrics?: boolean;\n    onChunk?: (chunk: any) => void;\n  }): Promise<{\n    data: any;\n    status: number;\n    headers: Record<string, string>;\n    metrics?: {\n      totalTime: number;\n      serializationTime: number;\n      networkTime: number;\n      deserializationTime: number;\n    }\n  }> {\n    const startTime = performance.now();\n    let serializationTime = 0;\n    let networkStart = 0;\n    let networkEnd = 0;\n    let deserializationTime = 0;\n\n    try {\n      // Start serialization timing\n      const serializationStart = performance.now();\n\n      // Set default method if not provided\n      const method = options.method || 'POST';\n      const responseType = options.responseType || 'json';\n\n      // Check if we need streaming (indicated by both onChunk and stream: true in body)\n      const isStreaming = options.onChunk && options.body?.stream;\n\n      // Prepare the request parameters\n      const params = {\n        path: options.path,\n        method: method,\n        body: options.body || {},\n        responseType: responseType,\n        stream: isStreaming\n      };\n\n      // End serialization timing\n      serializationTime = performance.now() - serializationStart;\n\n      // Start network timing\n      networkStart = performance.now();\n\n      if (isStreaming) {\n        // For streaming, we need to set up a special message handler\n        const messageId = this.generateMessageId();\n\n        // Create a promise that will resolve when streaming is complete\n        const streamingPromise = new Promise<any>((resolve, reject) => {\n          // Set up a message handler for streaming responses\n          const streamHandler = (message: ArrowMessage) => {\n            if (message.id === messageId && message.method === 'streamChunk') {\n              // Call the onChunk callback with the chunk data\n              options.onChunk?.(message.params);\n            } else if (message.id === messageId && message.method === 'streamEnd') {\n              // Streaming is complete, remove the handler and resolve\n              this.removeEventListener('message', streamHandler);\n\n              // End network timing\n              networkEnd = performance.now();\n\n              // Resolve with the final response\n              resolve(message.params?.result || {});\n            } else if (message.id === messageId && message.error) {\n              // Error occurred, remove the handler and reject\n              this.removeEventListener('message', streamHandler);\n              reject(new MCPError('Streaming error', {\n                code: 'STREAM_ERROR',\n                cause: message.error\n              }));\n            }\n          };\n\n          // Add the stream handler to listen for streaming chunks\n          this.addEventListener('message', streamHandler);\n\n          // Set up a timeout for the streaming request\n          const timer = setTimeout(() => {\n            this.removeEventListener('message', streamHandler);\n            reject(new MCPError('Stream request timed out', { code: 'TIMEOUT' }));\n          }, this.streamTimeout || 60000);\n\n          // Send the initial request to start streaming\n          this.sendArrowMessage({\n            jsonrpc: \"2.0\",\n            method: \"startStream\",\n            params,\n            id: messageId\n          }).catch(error => {\n            this.removeEventListener('message', streamHandler);\n            clearTimeout(timer);\n            reject(error);\n          });\n        });\n\n        // Wait for the streaming to complete\n        const response = await streamingPromise;\n\n        // Calculate deserializationTime (minimal for streaming)\n        deserializationTime = 0;\n\n        // Create the result object\n        const result: {\n          data: any;\n          status: number;\n          headers: Record<string, string>;\n          metrics?: {\n            totalTime: number;\n            serializationTime: number;\n            networkTime: number;\n            deserializationTime: number;\n          }\n        } = {\n          data: response.data || {},\n          status: response.status || 200,\n          headers: response.headers || {}\n        };\n\n        // Add metrics if requested\n        if (options.metrics) {\n          result.metrics = {\n            totalTime: performance.now() - startTime,\n            serializationTime,\n            networkTime: networkEnd - networkStart,\n            deserializationTime\n          };\n        }\n\n        return result;\n      } else {\n        // For non-streaming requests, use the regular sendArrowMessage\n        const response = await this.sendArrowMessage({\n          jsonrpc: \"2.0\",\n          method: \"sendRequest\",\n          params,\n          id: this.generateMessageId()\n        });\n\n        // End network timing\n        networkEnd = performance.now();\n\n        // Start deserialization timing\n        const deserializationStart = performance.now();\n\n        // Create the result object with the correct type that includes optional metrics\n        const result: {\n          data: any;\n          status: number;\n          headers: Record<string, string>;\n          metrics?: {\n            totalTime: number;\n            serializationTime: number;\n            networkTime: number;\n            deserializationTime: number;\n          }\n        } = {\n          data: response.data || {},\n          status: response.status || 200,\n          headers: response.headers || {}\n        };\n\n        // End deserialization timing\n        deserializationTime = performance.now() - deserializationStart;\n\n        // Add metrics if requested\n        if (options.metrics) {\n          result.metrics = {\n            totalTime: performance.now() - startTime,\n            serializationTime,\n            networkTime: networkEnd - networkStart,\n            deserializationTime\n          };\n        }\n\n        return result;\n      }\n    } catch (error) {\n      console.error('Error in sendRequest:', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Check server health\n   */\n  async checkHealth(): Promise<boolean> {\n    try {\n      // Try to ping the server via HTTP first (easier than WebSocket)\n      const healthUrl = new URL(this.baseUrl.replace('ws://', 'http://').replace('wss://', 'https://'));\n      healthUrl.pathname = '/health';\n\n      // Use fetch API for the HTTP health check\n      const response = await fetch(healthUrl.toString(), {\n        method: 'GET',\n        headers: {\n          'Accept': 'application/json',\n        }\n      });\n\n      if (response.ok) {\n        const data = await response.json();\n        return data.status === 'ok';\n      }\n\n      // If HTTP check fails, try WebSocket connection\n      if (this.status !== ArrowConnectionStatus.CONNECTED) {\n        return false;\n      }\n\n      // Try to get capabilities as a WebSocket health check\n      await this.getCapabilities();\n      return true;\n    } catch (error) {\n      console.error('Health check failed:', error);\n      return false;\n    }\n  }\n\n  /**\n   * Get server connection status as string\n   */\n  getConnectionStatusText(): string {\n    switch (this.status) {\n      case ArrowConnectionStatus.CONNECTED:\n        return 'Connected';\n      case ArrowConnectionStatus.CONNECTING:\n        return 'Connecting';\n      case ArrowConnectionStatus.DISCONNECTED:\n        return 'Disconnected';\n      case ArrowConnectionStatus.ERROR:\n        return 'Error';\n      case ArrowConnectionStatus.RECONNECTING:\n        return 'Reconnecting';\n      case ArrowConnectionStatus.CLOSING:\n        return 'Closing';\n      default:\n        return 'Unknown';\n    }\n  }\n\n  /**\n   * Process an incoming message\n   */\n  private processMessage(message: ArrowMessage): void {\n    // Find the corresponding pending request\n    const id = String(message.id || '');\n    const pendingRequest = this.pendingRequests.get(id);\n\n    if (pendingRequest) {\n      // Clear the timeout\n      if (pendingRequest.timer) {\n        clearTimeout(pendingRequest.timer);\n      }\n\n      // Remove from pending requests\n      this.pendingRequests.delete(id);\n\n      // Check for errors\n      if (message.error) {\n        pendingRequest.reject(new MCPError(message.error.message || 'Unknown error', {\n          code: String(message.error.code),\n          cause: message.error.data\n        }));\n      } else {\n        // Process the result, which might include binary data\n        let result = message.result;\n\n        // If binary data is present, try to process it using Arrow\n        if (message.binaryData && message.binaryData.length > 0) {\n          try {\n            // Try to process as Arrow data\n            // Add the binary data to the result for the consumer to process\n            if (!result) {\n              result = {};\n            }\n\n            if (typeof result === 'object') {\n              // Add the binary data buffer to the result\n              result.arrowData = message.binaryData.buffer;\n\n              // Try to extract schema information if available in the message\n              if (message.params?.schema) {\n                result.schema = message.params.schema;\n              }\n            }\n          } catch (error) {\n            console.warn('Error processing Arrow binary data:', error);\n            // Still resolve with the original result\n          }\n        }\n\n        // Resolve with the result\n        pendingRequest.resolve(result);\n      }\n    }\n\n    // If this is a streaming message, we don't need to call the message handler\n    // again as it's already handled by specific stream event listeners\n    if (message.method === 'streamChunk' || message.method === 'streamEnd') {\n      return;\n    }\n\n    // Notify handler for other messages\n    if (this.handlers.onMessage) {\n      try {\n        this.handlers.onMessage(message);\n      } catch (error) {\n        console.error('Error in message handler:', error);\n      }\n    }\n  }\n}\n\n/**\n * Create an Arrow IPC client\n */\nexport function createArrowClient(options: MCPOptions): MCPArrowClient {\n  return new MCPArrowClient(options);\n}\n\n// Add default export for easier importing\nexport default MCPArrowClient;\n"]}