UNPKG

mira-app-server

Version:

Mira Server - standalone server application using mira-app-core

146 lines 5.28 kB
import { ILibraryServerData } from 'mira-app-core/storage/sqlite'; import { MiraWebsocketServer } from './WebSocketServer'; import { PluginRouteDefinition } from './ServerPlugin'; import type { Request, Response } from 'express'; import type { MetadataRule } from './services/MetadataService'; export interface PluginConfig { name: string; enabled: boolean; path: string; version?: string; description?: string; author?: string; main?: string; icon?: string | null; title?: string; category?: string; tags?: string[]; registry?: string; installedAt?: string; } export interface ServerWebPluginManifest { pluginName: string; pluginId: string; version: string; index: string; serverPluginName: string; [key: string]: any; } export interface HttpHookContext { libraryId: string; clientId?: string; method: string; path: string; req: Request; res: Response; fields?: Record<string, any>; } export type HttpHookHandler = (context: HttpHookContext) => boolean | void | Promise<boolean | void>; export interface HttpHookDefinition { method?: string; path: string | RegExp; handler: HttpHookHandler; } export interface ServerFileFormatHandler { id: string; extensions?: string[]; mimeTypes?: string[]; thumbnailExtensions?: string[]; process?: (filePath: string, context?: Record<string, any>) => any | Promise<any>; thumbnail?: (srcPath: string, destPath: string) => Promise<void>; metadata?: MetadataRule['parse']; getExtraFileList?: (filePath: string, context?: Record<string, any>) => string[] | Promise<string[]>; getExtraFile?: (filePath: string, fileName: string, context?: Record<string, any>) => string | Promise<string>; viewers?: ServerPreviewViewerDefinition[]; } export interface ServerPreviewViewerContext { libraryId: string; fileId: string; file: Record<string, any>; filePath: string; fileUrl: string; getExtraFileUrl: (fileName: string) => string; } export interface ServerPreviewViewerDefinition { viewerId: string; title: string; entry: string; icon?: string; priority?: number; extensions?: string[]; mimeTypes?: string[]; getQuery?: (context: ServerPreviewViewerContext) => Record<string, unknown> | Promise<Record<string, unknown>>; } export interface ResolvedPreviewViewer { viewerId: string; pluginId: string; pluginName: string; serverPluginName: string; title: string; iframeUrl: string; priority: number; icon?: string; } export declare class ServerPluginManager { pluginsDir: string; server: MiraWebsocketServer; private dbService; private pluginsConfigPath; private loadedPlugins; private miraClient; private httpHooks; private fileFormatHandlers; fields: Record<string, any>[]; constructor({ server, dbService, pluginsDir }: { server: MiraWebsocketServer; dbService: ILibraryServerData; pluginsDir?: string; }); getPluginDir(pluginName: string): string; getPluginDistDir(pluginName: string): string; getPluginWebDir(pluginName: string): string; getLoadedWebPlugins(): ServerWebPluginManifest[]; private getPluginConfig; loadPlugins(reload?: boolean): Promise<void>; loadPlugin(pluginConfig: PluginConfig, reload?: boolean): Promise<void>; registerFields(fields: Record<string, any>[]): void; registerField(field: Record<string, any>): void; registerHttpHook(hook: HttpHookDefinition): void; registerFileFormat(pluginName: string, handler: ServerFileFormatHandler): () => void; unregisterFileFormat(pluginName: string, id: string): boolean; getFileFormatHandlers(): ServerFileFormatHandler[]; getPreviewViewers(context: ServerPreviewViewerContext): Promise<ResolvedPreviewViewer[]>; processFile(filePath: string, context?: Record<string, any>): Promise<any>; getExtraFileList(filePath: string, context?: Record<string, any>): Promise<string[] | undefined>; getExtraFile(filePath: string, fileName: string, context?: Record<string, any>): Promise<string | undefined>; private getFileFormatHandler; runHttpHooks(context: HttpHookContext): Promise<boolean>; private matchesHttpHook; getPlugin<T>(name: string): T | undefined; isPluginLoaded(name: string): boolean; unloadPlugin(name: string): boolean; reloadPlugin(name: string): Promise<boolean>; /** * 从插件目录的 package.json + icon 文件提取展示 meta */ private extractPluginMeta; getPluginsList(): any[]; addPlugin(config: PluginConfig): Promise<void>; /** * 重新从 package.json 同步所有插件的展示 meta 到 plugins.json (供「检查更新」调用) */ syncPluginsMeta(): number; /** * 获取所有已加载插件的路由定�? */ getAllPluginRoutes(): PluginRouteDefinition[]; /** * 获取指定插件的路由定�? */ getPluginRoutes(pluginName: string): PluginRouteDefinition[]; /** * 手动注册插件实例(用于测试或特殊用途) */ registerPluginInstance(pluginName: string, pluginInstance: any): void; } //# sourceMappingURL=ServerPluginManager.d.ts.map