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