Skip to main content
Glama
trigger-registry.tsβ€’3.12 kB
/** * Trigger Registry - central registry for trigger handlers * * Uses the plugin pattern for extensibility: * - Register handlers at startup * - Get handler by trigger type * - List all registered types */ import { N8nApiClient } from '../services/n8n-api-client'; import { InstanceContext } from '../types/instance-context'; import { TriggerType } from './types'; import { BaseTriggerHandler, TriggerHandlerConstructor } from './handlers/base-handler'; /** * Central registry for trigger handlers */ export class TriggerRegistry { private static handlers: Map<TriggerType, TriggerHandlerConstructor> = new Map(); private static initialized = false; /** * Register a trigger handler * * @param type - The trigger type this handler supports * @param HandlerClass - The handler class constructor */ static register(type: TriggerType, HandlerClass: TriggerHandlerConstructor): void { this.handlers.set(type, HandlerClass); } /** * Get a handler instance for a trigger type * * @param type - The trigger type * @param client - n8n API client * @param context - Optional instance context * @returns Handler instance or undefined if not registered */ static getHandler( type: TriggerType, client: N8nApiClient, context?: InstanceContext ): BaseTriggerHandler | undefined { const HandlerClass = this.handlers.get(type); if (!HandlerClass) { return undefined; } return new HandlerClass(client, context); } /** * Check if a trigger type has a registered handler */ static hasHandler(type: TriggerType): boolean { return this.handlers.has(type); } /** * Get all registered trigger types */ static getRegisteredTypes(): TriggerType[] { return Array.from(this.handlers.keys()); } /** * Clear all registered handlers (useful for testing) */ static clear(): void { this.handlers.clear(); this.initialized = false; } /** * Check if registry is initialized */ static isInitialized(): boolean { return this.initialized; } /** * Mark registry as initialized */ static markInitialized(): void { this.initialized = true; } } /** * Initialize the registry with all handlers * Called once at startup */ export async function initializeTriggerRegistry(): Promise<void> { if (TriggerRegistry.isInitialized()) { return; } // Import handlers dynamically to avoid circular dependencies const { WebhookHandler } = await import('./handlers/webhook-handler'); const { FormHandler } = await import('./handlers/form-handler'); const { ChatHandler } = await import('./handlers/chat-handler'); // Register all handlers TriggerRegistry.register('webhook', WebhookHandler); TriggerRegistry.register('form', FormHandler); TriggerRegistry.register('chat', ChatHandler); TriggerRegistry.markInitialized(); } /** * Ensure registry is initialized (lazy initialization) */ export async function ensureRegistryInitialized(): Promise<void> { if (!TriggerRegistry.isInitialized()) { await initializeTriggerRegistry(); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/czlonkowski/n8n-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server