UNPKG

@thorium-dev-group/x402-mcp-extension

Version:
103 lines 4.11 kB
"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