middy-mcp
Version:
Middy middleware for Model Context Protocol server
42 lines • 1.62 kB
JavaScript
const isRequestMessage = (message) => "method" in message && "id" in message;
const isResponseMessage = (message) => "id" in message;
export class HttpServerTransport {
_started = false;
_pendingRequests = new Map();
onmessage;
start = async () => {
if (this._started) {
throw new Error("HttpServerTransport already started");
}
this._started = true;
};
send = async (message) => {
if (isResponseMessage(message)) {
const pendingRequest = this._pendingRequests.get(message.id);
if (pendingRequest !== undefined) {
pendingRequest.resolve(message);
this._pendingRequests.delete(message.id);
}
}
};
close = async () => { };
_startFreshSession = () => {
this._pendingRequests.clear();
};
handleJSONRPCMessages = async (jsonRPCMessages) => {
this._startFreshSession();
jsonRPCMessages.map((message) => {
this.onmessage?.(message);
});
const requestMessages = jsonRPCMessages.filter(isRequestMessage);
if (requestMessages.length === 0) {
return;
}
// Create promises for each request and collect their responses
const responseMessages = await Promise.all(requestMessages.map((requestMessage) => new Promise((resolve, reject) => {
this._pendingRequests.set(requestMessage.id, { resolve, reject });
})));
return responseMessages.length > 1 ? responseMessages : responseMessages[0];
};
}
//# sourceMappingURL=HttpServerTransport.js.map