@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
JavaScript
;
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;