UNPKG

@mulutime/plugin-sdk

Version:

SDK for developing MuluTime booking platform plugins

85 lines 4.12 kB
import { AxiosInstance } from 'axios'; import { PluginManifest, PluginPermission, SystemEventType, PluginContext, CalendarEvent, SystemEventPayload, LocationInfo, BookingEventPayload } from '@mulutime/plugin-types'; import { IntegrationPlugin, ValidationResult } from './types'; import { PluginTemplateGenerator } from './helpers'; import { PluginTestUtils } from './testUtilities'; export declare class PluginSDK { private context; private httpClient; private ajv; private actionRegistry?; private actionExecutor?; constructor(context: PluginContext); get logger(): import("@mulutime/plugin-types").PluginLogger; get storage(): import("@mulutime/plugin-types").PluginStorage; setConfig(config: Record<string, any>): Promise<void>; get api(): import("@mulutime/plugin-types").PluginAPIClient; get config(): Record<string, any>; get permissions(): PluginPermission[]; get http(): AxiosInstance; getContext(): PluginContext; validateSchema(data: any, schema: object): ValidationResult; hasPermission(permission: PluginPermission): boolean; requirePermission(permission: PluginPermission): void; getUserId(): string | undefined; getOrganizationId(): string | undefined; callBookingAPI(endpoint: string, options?: { method?: 'GET' | 'POST' | 'PUT' | 'DELETE'; data?: any; params?: Record<string, any>; }): Promise<any>; triggerEvent(eventType: SystemEventType, data: Record<string, any>): Promise<void>; get actions(): { registry: ActionRegistry; executor: ActionExecutor | undefined; }; } export declare abstract class BasePlugin implements IntegrationPlugin { /** * Create a location (online or in-place) for a booking event. Must return a LocationInfo object. * Plugins can override this. Throws by default. */ createLocation?(eventData: BookingEventPayload, context: PluginContext): Promise<LocationInfo[]>; /** * Update the location for a booking event. Must return the updated LocationInfo object. * Plugins can override this. Throws by default. */ updateLocation?(eventData: BookingEventPayload, context: PluginContext): Promise<LocationInfo[]>; fetchExternalEvents?(context: PluginContext): Promise<CalendarEvent[] | null>; createEvent?(eventData: SystemEventPayload, context: PluginContext): Promise<boolean>; /** * Process incoming webhook data. Must be implemented by webhook-type plugins. * Subclasses must implement this method to handle webhook payloads. * @returns WebhookProcessingResult with status and optional response data */ processWebhook?(eventData: SystemEventPayload, context: PluginContext): Promise<{ status: 'success' | 'error' | 'ignored'; message?: string; }>; abstract manifest: PluginManifest; protected sdk: PluginSDK | null; initialize(context: PluginContext): void; private registerActions; protected getSDK(): PluginSDK; 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?(): any; handleWebhook?(context: PluginContext, payload: any): Promise<any>; } export * from './actions'; import { ActionRegistry } from './actions/action-registry'; import { ActionExecutor } from './actions/action-executor'; export declare function initializePluginSDK(baseURL: string, pluginSecret: string): Promise<PluginSDK>; export declare const TestUtils: PluginTestUtils; export declare const TemplateGenerator: typeof PluginTemplateGenerator; export { createEnhancedPlugin, createManifest, createPlugin, } from './helpers'; export * from './types'; export * from './helpers'; export * from './testUtilities'; export * from './pluginClients'; export default PluginSDK; //# sourceMappingURL=index.d.ts.map