@mulutime/plugin-sdk
Version:
SDK for developing MuluTime booking platform plugins
85 lines • 4.12 kB
TypeScript
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