import type { UnchainedCore } from '../core-index.ts'; import type { IBaseAdapter } from '@unchainedshop/utils'; import type { mongodb } from '@unchainedshop/mongodb'; export interface PluginHttpRoute { path: string; method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'OPTIONS' | 'ALL'; handler: (request: Request, context: UnchainedCore & { params: Record; userId?: string; impersonatorId?: string; }) => Response | Promise; } export type PluginModuleFactory = (options: { db: mongodb.Db; }) => Record; export interface IPlugin { key: string; label: string; version: string; adapters?: IBaseAdapter[]; module?: PluginModuleFactory; routes?: PluginHttpRoute[]; onRegister?: (unchainedAPI: UnchainedCore) => void | boolean | Promise; onShutdown?: (unchainedAPI: UnchainedCore) => void | Promise; } declare class PluginRegistry { private plugins; private moduleFactories; private skippedPlugins; register(plugin: IPlugin): void; initialize(unchainedAPI: UnchainedCore): Promise; getModuleFactories(): PluginModuleFactory[]; getRoutes(): PluginHttpRoute[]; shutdown(unchainedAPI: UnchainedCore): Promise; getPlugin(key: string): IPlugin | undefined; getAllPlugins(): IPlugin[]; getAdapters(adapterType: symbol): IBaseAdapter[]; hasPlugin(key: string): boolean; clear(): void; } export declare const pluginRegistry: PluginRegistry; export {};