UNPKG

n8n-nodes-sevdesk-v2

Version:

n8n community node for SevDesk API v2 integration with 24 production-ready workflow templates. Direct API access without external dependencies - simplified, secure, and optimized for German accounting automation (n8n 1.101.1 compatible).

134 lines (133 loc) 5.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ResourceHandlerFactory = void 0; const ContactHandler_1 = require("../handlers/ContactHandler"); const InvoiceHandler_1 = require("../handlers/InvoiceHandler"); const VoucherHandler_1 = require("../handlers/VoucherHandler"); const OrderHandler_1 = require("../handlers/OrderHandler"); const RESOURCE_HANDLERS = { 'contact': ContactHandler_1.ContactHandler, 'invoice': InvoiceHandler_1.InvoiceHandler, 'voucher': VoucherHandler_1.VoucherHandler, 'order': OrderHandler_1.OrderHandler, }; const PLUGIN_REGISTRY = new Map(); class ResourceHandlerFactory { static createHandler(resource, executeFunctions) { const resourceKey = resource.toLowerCase(); const plugin = PLUGIN_REGISTRY.get(resourceKey); if (plugin) { return new plugin.handlerClass(executeFunctions); } const HandlerClass = RESOURCE_HANDLERS[resourceKey]; if (!HandlerClass) { throw new Error(`No handler found for resource: ${resource}`); } return new HandlerClass(executeFunctions); } static isResourceSupported(resource) { const resourceKey = resource.toLowerCase(); return PLUGIN_REGISTRY.has(resourceKey) || resourceKey in RESOURCE_HANDLERS; } static getSupportedResources() { const pluginResources = Array.from(PLUGIN_REGISTRY.keys()); const legacyResources = Object.keys(RESOURCE_HANDLERS); return [...new Set([...pluginResources, ...legacyResources])]; } static registerHandler(resource, handlerClass) { RESOURCE_HANDLERS[resource.toLowerCase()] = handlerClass; } static unregisterHandler(resource) { delete RESOURCE_HANDLERS[resource.toLowerCase()]; } static async registerPlugin(resource, plugin) { const resourceKey = resource.toLowerCase(); try { if (!plugin.metadata || !plugin.metadata.name || !plugin.metadata.version) { return { success: false, message: 'Plugin metadata is incomplete. Name and version are required.', }; } if (PLUGIN_REGISTRY.has(resourceKey)) { return { success: false, message: `Plugin for resource '${resource}' is already registered.`, }; } if (plugin.validate) { const isValid = await plugin.validate(); if (!isValid) { return { success: false, message: 'Plugin validation failed.', }; } } if (plugin.initialize) { await plugin.initialize(); } PLUGIN_REGISTRY.set(resourceKey, plugin); return { success: true, message: `Plugin '${plugin.metadata.name}' registered successfully for resource '${resource}'.`, plugin, }; } catch (error) { return { success: false, message: `Failed to register plugin: ${error instanceof Error ? error.message : String(error)}`, }; } } static async unregisterPlugin(resource) { const resourceKey = resource.toLowerCase(); const plugin = PLUGIN_REGISTRY.get(resourceKey); if (!plugin) { return { success: false, message: `No plugin found for resource '${resource}'.`, }; } try { if (plugin.cleanup) { await plugin.cleanup(); } PLUGIN_REGISTRY.delete(resourceKey); return { success: true, message: `Plugin '${plugin.metadata.name}' unregistered successfully.`, plugin, }; } catch (error) { return { success: false, message: `Failed to unregister plugin: ${error instanceof Error ? error.message : String(error)}`, }; } } static getPluginMetadata(resource) { const plugin = PLUGIN_REGISTRY.get(resource.toLowerCase()); return plugin ? plugin.metadata : null; } static getAllPlugins() { return new Map(PLUGIN_REGISTRY); } static isPluginResource(resource) { return PLUGIN_REGISTRY.has(resource.toLowerCase()); } static getPluginStats() { const pluginResources = Array.from(PLUGIN_REGISTRY.keys()); const legacyResources = Object.keys(RESOURCE_HANDLERS); return { totalPlugins: PLUGIN_REGISTRY.size, totalLegacyHandlers: legacyResources.length, totalResources: this.getSupportedResources().length, pluginResources, legacyResources, }; } } exports.ResourceHandlerFactory = ResourceHandlerFactory;