@thorium-dev-group/x402-mcp-extension
Version:
X402-MCP Protocol Extension
103 lines • 4.11 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.HandlerRegistry = void 0;
const mcpPrompt_1 = require("../../decorators/mcpPrompt");
const mcpResource_1 = require("../../decorators/mcpResource");
const mcpTool_1 = require("../../decorators/mcpTool");
class HandlerRegistry {
static createSessionHandlers(handlerClasses) {
const sessionHandlers = {
tools: [],
prompts: [],
resources: [],
resourceTemplates: []
};
for (const handlerClass of handlerClasses) {
const instance = new handlerClass();
const instanceHandlers = HandlerRegistry.extractHandlersFromInstance(instance);
for (const handlerInfo of instanceHandlers) {
switch (handlerInfo.type) {
case 'tool':
sessionHandlers.tools.push(handlerInfo);
break;
case 'prompt':
sessionHandlers.prompts.push(handlerInfo);
break;
case 'resource':
sessionHandlers.resources.push(handlerInfo);
break;
case 'resourceTemplate':
sessionHandlers.resourceTemplates.push(handlerInfo);
break;
}
}
}
return sessionHandlers;
}
static extractHandlersFromInstance(instance) {
const handlers = [];
const prototype = Object.getPrototypeOf(instance);
const methods = Object.getOwnPropertyNames(prototype);
for (const methodName of methods) {
if (methodName === 'constructor')
continue;
const method = prototype[methodName];
if (typeof method !== 'function')
continue;
const toolOptions = (0, mcpTool_1.getMCPToolOptions)(instance, methodName);
const promptOptions = (0, mcpPrompt_1.getMCPPromptOptions)(instance, methodName);
const resourceOptions = (0, mcpResource_1.getMCPResourceOptions)(instance, methodName);
if (toolOptions) {
handlers.push({
name: toolOptions.name,
handler: method.bind(instance),
type: 'tool',
options: toolOptions,
paymentOptions: toolOptions.payment,
instance,
});
}
else if (promptOptions) {
handlers.push({
name: promptOptions.name,
handler: method.bind(instance),
type: 'prompt',
options: promptOptions,
paymentOptions: promptOptions.payment,
instance,
});
}
else if (resourceOptions) {
if (resourceOptions.template) {
handlers.push({
name: resourceOptions.name,
handler: method.bind(instance),
type: 'resourceTemplate',
options: resourceOptions,
paymentOptions: resourceOptions.payment,
instance,
});
}
else {
handlers.push({
name: resourceOptions.name,
handler: method.bind(instance),
type: 'resource',
options: resourceOptions,
paymentOptions: resourceOptions.payment,
instance,
});
}
}
}
return handlers;
}
static isPaymentRequired(handlerInfo) {
return handlerInfo.paymentOptions !== undefined;
}
static getPaymentOptions(handlerInfo) {
return handlerInfo.paymentOptions;
}
}
exports.HandlerRegistry = HandlerRegistry;
//# sourceMappingURL=handler-registry.js.map