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