UNPKG

@agentpaid/mcp-use

Version:

A utility library for integrating Model Context Protocol (MCP) with LangChain, Zod, and related tools. Provides helpers for schema conversion, event streaming, and SDK usage.

75 lines (74 loc) 2.76 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.WebSocketConnectionManager = void 0; const ws_1 = __importDefault(require("ws")); const logging_js_1 = require("../logging.js"); const base_js_1 = require("./base.js"); class WebSocketConnectionManager extends base_js_1.ConnectionManager { url; headers; _ws = null; /** * @param url The WebSocket URL to connect to. * @param headers Optional headers to include in the connection handshake. */ constructor(url, headers = {}) { super(); this.url = url; this.headers = headers; } /** Establish a WebSocket connection and wait until it is open. */ async establishConnection() { logging_js_1.logger.debug(`Connecting to WebSocket: ${this.url}`); return new Promise((resolve, reject) => { const ws = new ws_1.default(this.url, { headers: this.headers }); this._ws = ws; const onOpen = () => { // eslint-disable-next-line ts/no-use-before-define cleanup(); logging_js_1.logger.debug('WebSocket connected successfully'); resolve(ws); }; const onError = (err) => { // eslint-disable-next-line ts/no-use-before-define cleanup(); logging_js_1.logger.error(`Failed to connect to WebSocket: ${err}`); reject(err); }; const cleanup = () => { ws.off('open', onOpen); ws.off('error', onError); }; // Register listeners (browser vs Node API differences handled) ws.on('open', onOpen); ws.on('error', onError); }); } /** Cleanly close the WebSocket connection. */ async closeConnection(connection) { logging_js_1.logger.debug('Closing WebSocket connection'); return new Promise((resolve) => { const onClose = () => { connection.off('close', onClose); this._ws = null; resolve(); }; if (connection.readyState === ws_1.default.CLOSED) { onClose(); return; } connection.on('close', onClose); try { connection.close(); } catch (e) { logging_js_1.logger.warn(`Error closing WebSocket connection: ${e}`); onClose(); } }); } } exports.WebSocketConnectionManager = WebSocketConnectionManager;