UNPKG

@mulutime/plugin-sdk

Version:

SDK for developing MuluTime booking platform plugins

172 lines 6 kB
import { PluginManifest, PluginPermission, PluginCategory, SystemEventType, PluginScheduleType, APIAccessScope, // <-- Add this enum in @mulutime/plugin-types PluginContext } from '@mulutime/plugin-types'; import { JSONSchema7 } from 'json-schema'; export { PluginManifest, PluginPermission, IntegrationType, PluginCategory, PluginContext, SystemEventType, PluginScheduleType } from '@mulutime/plugin-types'; export interface ValidationResult { valid: boolean; errors?: string[]; warnings?: string[]; } export interface PluginLogger { debug(message: string, meta?: any): void; info(message: string, meta?: any): void; warn(message: string, meta?: any): void; error(message: string, error?: Error, meta?: any): void; } export interface PluginStorage { get<T = any>(key: string): Promise<T | null>; set(key: string, value: any): Promise<void>; delete(key: string): Promise<void>; list(prefix?: string): Promise<string[]>; } export interface IPluginAPIClient { get(url: string, options?: RequestInit): Promise<Response>; post(url: string, data?: any, options?: RequestInit): Promise<Response>; put(url: string, data?: any, options?: RequestInit): Promise<Response>; delete(url: string, options?: RequestInit): Promise<Response>; } export interface IntegrationPlugin { manifest: PluginManifest; onInstall?(context: PluginContext): Promise<void>; onUninstall?(context: PluginContext): Promise<void>; onUpdate?(context: PluginContext, oldVersion: string): Promise<void>; onActivate?(context: PluginContext): Promise<void>; onDeactivate?(context: PluginContext): Promise<void>; validateConfig?(config: Record<string, any>): Promise<ValidationResult>; getConfigSchema?(): JSONSchema7; getEventSubscriptions?(): Array<{ eventTypes: string[]; actionMethod: string; filters?: { userId?: string; organizationId?: string; conditions?: Record<string, any>; }; enabled?: boolean; priority?: number; }>; handleWebhook?(context: PluginContext, payload: any): Promise<any>; [key: string]: any; } export interface SystemEventPayload { eventType: SystemEventType; eventId: string; timestamp: string; userId?: string; organizationId?: string; data: Record<string, any>; metadata?: { source: string; version: string; correlationId?: string; }; } export interface EventAction { eventType: SystemEventType; handler: (event: SystemEventPayload, context: PluginContext) => Promise<void>; filters?: { organizationId?: string; conditions?: Record<string, any>; }; priority?: number; enabled: boolean; } export interface ScheduledAction { name: string; schedule: PluginScheduleType; time?: string; cronExpression?: string; handler: (context: PluginContext) => Promise<void>; enabled: boolean; timezone?: string; } export interface APIAction { path: string; method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'; handler: (request: APIRequest, context: PluginContext) => Promise<APIResponse>; requiredPermissions?: PluginPermission[]; validation?: { query?: JSONSchema7; body?: JSONSchema7; params?: JSONSchema7; }; access?: APIAccessScope | APIAccessScope[]; } export interface LifecycleAction { onInstall?: (context: PluginContext) => Promise<void>; onUninstall?: (context: PluginContext) => Promise<void>; onUpdate?: (context: PluginContext, oldVersion: string) => Promise<void>; onEnable?: (context: PluginContext) => Promise<void>; onDisable?: (context: PluginContext) => Promise<void>; validateConfig?: (config: Record<string, any>) => Promise<ValidationResult>; } export interface SystemEvent { id: string; type: SystemEventType; data: any; timestamp: string; organizationId?: string; userId?: string; } export interface APIRequest { params: Record<string, string>; query: Record<string, string>; body: any; headers: Record<string, string>; userId: string; organizationId?: string; } export interface APIResponse { status: number; data?: any; error?: string; headers?: Record<string, string>; } export interface PluginStructure { manifest: PluginManifest; eventActions?: EventAction[]; scheduledActions?: ScheduledAction[]; apiActions?: APIAction[]; lifecycleActions?: LifecycleAction; } export interface PluginTemplate { name: string; description: string; category: PluginCategory; files: { [filePath: string]: string; }; dependencies?: string[]; devDependencies?: string[]; } export interface PluginEvents { emit(eventType: string, data: any): Promise<void>; on(eventType: string, handler: (data: any) => void): void; off(eventType: string, handler: (data: any) => void): void; } export interface PluginHTTP { get(url: string, options?: RequestInit): Promise<Response>; post(url: string, data?: any, options?: RequestInit): Promise<Response>; put(url: string, data?: any, options?: RequestInit): Promise<Response>; delete(url: string, options?: RequestInit): Promise<Response>; patch(url: string, data?: any, options?: RequestInit): Promise<Response>; } export interface TestContext extends PluginContext { mockStorage: Map<string, any>; mockLogs: Array<{ level: string; message: string; meta?: any; }>; mockEvents: Array<{ type: string; data: any; }>; } export interface PluginTestHelpers { createMockContext(overrides?: Partial<PluginContext>): TestContext; createMockEvent(type: SystemEventType, data: any): SystemEvent; createMockAPIRequest(path: string, method: string, data?: any): APIRequest; validateManifest(manifest: PluginManifest): ValidationResult; } //# sourceMappingURL=types.d.ts.map