UNPKG

vnite-plugin-sdk

Version:
209 lines 5.83 kB
import type { IConfigDB, IGameDB, IPluginDB } from './database'; import type { IEventBus } from './event'; import type { IIpcManager } from './ipc'; import type { IScraperManager } from './scraper'; export interface PluginManifest { /** Plugin ID, must be unique */ id: string; /** Plugin name */ name: string; /** Plugin version */ version: string; /** Plugin description */ description: string; /** Plugin author */ author: string; /** Plugin homepage */ homepage?: string; /** Plugin license */ license?: string; /** Minimum supported Vnite version */ vniteVersion: string; /** Plugin main entry file */ main: string; /** Plugin icon path */ icon?: string; /** Plugin keywords */ keywords?: string[]; /** Plugin category */ category?: PluginCategory; /** Plugin dependencies */ dependencies?: Record<string, string>; /** Development dependencies */ devDependencies?: Record<string, string>; /** Plugin configuration */ configuration?: PluginConfiguration[]; /** Github repository information */ repo?: { owner: string; name: string; }; } interface BasePluginConfiguration { id: string; title: string; default: any; description?: string; /** Common style configuration */ controlClassName?: string; } interface StringPluginConfiguration extends BasePluginConfiguration { type: 'string'; controlOptions: { controlType: 'input' | 'textarea'; inputType?: 'text' | 'email' | 'password' | 'url'; placeholder?: string; rows?: number; }; } interface NumberPluginConfiguration extends BasePluginConfiguration { type: 'number'; controlOptions: { controlType: 'input' | 'slider'; placeholder?: string; min?: number; max?: number; step?: number; formatValue?: (value: number) => string; }; } interface BooleanPluginConfiguration extends BasePluginConfiguration { type: 'boolean'; controlOptions: { controlType: 'switch'; }; } interface SelectPluginConfiguration extends BasePluginConfiguration { type: 'select'; options: Array<{ label: string; value: any; }>; controlOptions: { controlType: 'select'; placeholder?: string; }; } interface ArrayPluginConfiguration extends BasePluginConfiguration { type: 'array'; controlOptions: { controlType: 'arrayeditor'; arrayEditorPlaceholder?: string; arrayEditorTooltipText?: string; arrayEditorDialogTitle?: string; arrayEditorDialogPlaceholder?: string; }; } interface DatePluginConfiguration extends BasePluginConfiguration { type: 'date'; controlOptions: { controlType: 'dateinput'; placeholder?: string; }; } interface FilePluginConfiguration extends BasePluginConfiguration { type: 'file'; controlOptions: { controlType: 'fileinput'; placeholder?: string; dialogFilters?: Array<{ name: string; extensions: string[]; }>; buttonIcon?: string; buttonTooltip?: string; }; } interface HotkeyPluginConfiguration extends BasePluginConfiguration { type: 'hotkey'; controlOptions: { controlType: 'hotkey'; inputClassName?: string; }; } export type PluginConfiguration = StringPluginConfiguration | NumberPluginConfiguration | BooleanPluginConfiguration | SelectPluginConfiguration | ArrayPluginConfiguration | DatePluginConfiguration | FilePluginConfiguration | HotkeyPluginConfiguration; export type PluginCategory = 'scraper' | 'common'; export declare enum PluginStatus { INSTALLED = "installed", ENABLED = "enabled", DISABLED = "disabled", LOADING = "loading", ERROR = "error", UNINSTALLED = "uninstalled" } export interface PluginInfo { manifest: PluginManifest; status: PluginStatus; installPath: string; installTime: Date; lastUpdateTime?: Date; error?: string; instance?: any; } export interface PluginSearchResult { plugins: PluginPackage[]; totalCount: number; currentPage: number; totalPages: number; } export interface PluginStatsData { total: number; enabled: number; disabled: number; error: number; } export interface PluginInstallOptions { autoEnable?: boolean; overwrite?: boolean; onProgress?: (progress: number, message: string) => void; } export interface PluginSearchOptions { keyword?: string; category?: PluginCategory | 'all'; page?: number; perPage?: number; status?: PluginStatus; sort?: 'stars' | 'updated' | 'name' | 'status' | 'category' | 'author' | 'date'; order?: 'desc' | 'asc'; } export interface PluginRegistry { name: string; url: string; enabled: boolean; } export interface PluginPackage { manifest: PluginManifest; downloadUrl: string; size: number; checksum: string; publishTime: string; installed?: boolean; stars?: number; createdAt?: string; updatedAt?: string; owner?: string; repoUrl?: string; readme?: string; homepageUrl?: string; } export interface PluginUpdateInfo { pluginId: string; currentVersion: string; latestVersion: string; downloadUrl: string; } export interface IPluginAPI { readonly pluginId: string; readonly ConfigDB: IConfigDB; readonly GameDB: IGameDB; readonly PluginDB: IPluginDB; readonly eventBus: IEventBus; readonly ipc: IIpcManager; readonly scraper: IScraperManager; } export interface IPlugin { activate(api: IPluginAPI): Promise<void> | void; deactivate?(api: IPluginAPI): Promise<void> | void; } export {}; //# sourceMappingURL=plugin.d.ts.map