@mulutime/plugin-sdk
Version:
SDK for developing MuluTime booking platform plugins
88 lines • 2.82 kB
TypeScript
import { PluginContext } from '@mulutime/plugin-types';
import { SystemEventType, SystemEventPayload, EventAction } from '../types';
export interface EventHandlerOptions {
maxRetries?: number;
retryDelay?: number;
timeout?: number;
enableFiltering?: boolean;
}
export declare class EventActionHandler {
private actions;
private options;
constructor(options?: EventHandlerOptions);
/**
* Register an event action handler
*/
register(action: EventAction): void;
/**
* Register multiple event actions
*/
registerMany(actions: EventAction[]): void;
/**
* Unregister an event action handler
*/
unregister(eventType: SystemEventType, handler: EventAction['handler']): void;
/**
* Handle an incoming system event
*/
handleEvent(event: SystemEventPayload, context: PluginContext): Promise<void>;
/**
* Check if a handler should be executed based on filters
*/
private shouldExecuteHandler;
/**
* Execute a single event handler with retry logic
*/
private executeHandler;
/**
* Get a nested value from an object using dot notation
*/
private getNestedValue;
/**
* Delay utility for retries
*/
private delay;
/**
* Get all registered event types
*/
getRegisteredEventTypes(): SystemEventType[];
/**
* Get handlers for a specific event type
*/
getHandlers(eventType: SystemEventType): EventAction[];
/**
* Clear all registered handlers
*/
clear(): void;
/**
* Get statistics about registered handlers
*/
getStats(): {
totalEventTypes: number;
totalHandlers: number;
enabledHandlers: number;
handlersByEventType: Record<string, number>;
};
}
export declare class EventActionBuilder {
private action;
static create(): EventActionBuilder;
eventType(type: SystemEventType): EventActionBuilder;
handler(handler: EventAction['handler']): EventActionBuilder;
priority(priority: number): EventActionBuilder;
enabled(enabled?: boolean): EventActionBuilder;
filterByOrganization(organizationId: string): EventActionBuilder;
filterByConditions(conditions: Record<string, any>): EventActionBuilder;
build(): EventAction;
}
export declare function OnEvent(eventTypes: SystemEventType | SystemEventType[], options?: {
priority?: number;
filters?: EventAction['filters'];
}): any;
export declare function createEventAction(eventType: SystemEventType, handler: EventAction['handler'], options?: {
priority?: number;
enabled?: boolean;
filters?: EventAction['filters'];
}): EventAction;
export declare function extractEventActions(pluginClass: any): EventAction[];
//# sourceMappingURL=event-handler.d.ts.map