vnite-plugin-sdk
Version:
Vnite Plugin Development SDK
185 lines • 5.08 kB
TypeScript
export interface IEventBus {
emit<T extends EventType>(eventType: T, data: EventData<T>, options: {
source: string;
correlationId?: string;
}): boolean;
on<T extends EventType>(eventType: T, handler: (data: EnhancedEventData<T>) => void | Promise<void>): () => void;
once<T extends EventType>(eventType: T, handler: (data: EnhancedEventData<T>) => void | Promise<void>): () => void;
off<T extends EventType>(eventType: T, handler: (data: EnhancedEventData<T>) => void | Promise<void>): void;
waitFor<T extends EventType>(eventType: T, timeout?: number, condition?: (data: EnhancedEventData<T>) => boolean): Promise<EnhancedEventData<T>>;
emitBatch<T extends EventType>(events: Array<{
eventType: T;
data: EventData<T>;
options?: {
source: string;
correlationId?: string;
};
}>): void;
queryHistory(options?: EventHistoryQuery): EventHistoryEntry[];
getTotalEvents(): number;
getEventsByType(): Record<string, number>;
getRecentEvents(limit?: number): EventHistoryEntry[];
clearHistory(): void;
exportHistory(): EventHistoryEntry[];
getHistoryStats(): {
totalEvents: number;
uniqueEventTypes: number;
oldestEvent?: EventHistoryEntry;
newestEvent?: EventHistoryEntry;
averageEventsPerMinute: number;
};
}
export interface EventHistoryEntry {
eventType: EventType;
data: EnhancedEventData<EventType>;
timestamp: number;
id: string;
}
export interface EventHistoryQuery {
eventType?: EventType;
limit?: number;
offset?: number;
fromTimestamp?: number;
toTimestamp?: number;
source?: string;
correlationId?: string;
}
export interface EventMetadata {
id: string;
timestamp: number;
source: string;
correlationId?: string;
}
export interface AppEvents {
'app:ready': undefined;
'game:added': {
gameId: string;
name: string;
dataSource?: string;
metadata?: Record<string, any>;
};
'game:launched': {
gameId: string;
launchMode?: string;
launchConfig?: Record<string, any>;
};
'game:stopped': {
gameId: string;
duration: number;
playtime?: number;
};
'game:deleted': {
gameId: string;
name: string;
};
'game:save-created': {
gameId: string;
saveId: string;
};
'game:save-restored': {
gameId: string;
saveId: string;
};
'game:save-deleted': {
gameId: string;
saveId: string;
};
'game:memory-created': {
gameId: string;
memoryId: string;
};
'game:memory-deleted': {
gameId: string;
memoryId: string;
};
'game:memory-cover-updated': {
gameId: string;
memoryId: string;
};
'theme:preset-changed': {
preset: string;
};
'plugin:enabled': {
pluginId: string;
};
'plugin:disabled': {
pluginId: string;
};
'plugin:installed': {
pluginId: string;
activate: boolean;
};
'plugin:uninstalled': {
pluginId: string;
removeData: boolean;
};
'scanner:started': {
scannerId: string;
scannerPath: string;
totalScanners?: number;
};
'scanner:completed': {
scannerId: string;
gamesAdded: number;
duration: number;
failedFolders: number;
totalProcessed: number;
};
'scanner:folder-fixed': {
scannerId: string;
folderPath: string;
gameId: string;
};
'scanner:folder-ignored': {
scannerId: string;
folderPath: string;
};
'language:changed': {
newLanguage: string;
};
'plugin:loaded': {
pluginId: string;
pluginName: string;
version: string;
loadTime: number;
};
'plugin:unloaded': {
pluginId: string;
pluginName: string;
reason: 'user' | 'error' | 'update';
};
'plugin:error': {
pluginId: string;
error: string;
context: string;
canRecover: boolean;
};
'db:backup-completed': {
targetPath: string;
};
'db:restore-completed': {
sourcePath: string;
};
'tray:config-updated': undefined;
}
export type EventHandler<T extends EventType> = (data: EnhancedEventData<T>) => void | Promise<void>;
export type EventUnsubscribe = () => void;
export interface EventHistoryEntry {
eventType: EventType;
data: EnhancedEventData<EventType>;
timestamp: number;
id: string;
}
export interface EventHistoryQuery {
eventType?: EventType;
limit?: number;
offset?: number;
fromTimestamp?: number;
toTimestamp?: number;
source?: string;
correlationId?: string;
}
export type EventType = keyof AppEvents;
export type EventData<T extends EventType> = AppEvents[T];
export type EnhancedEventData<T extends EventType> = AppEvents[T] & EventMetadata;
//# sourceMappingURL=event.d.ts.map