vnite-plugin-sdk
Version:
Vnite Plugin Development SDK
209 lines • 5.83 kB
TypeScript
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