export type ModuleRouteDef = {
    method: string;
    path: string;
    handler: string;
    perms?: string;
    summary?: string;
};
export type ModuleMenuDef = {
    name: string;
    router?: string;
    perms?: string;
    type?: number;
    icon?: string;
    orderNum?: number;
    appKey?: string;
    isShow?: boolean;
};
export type ModuleManifest = {
    name: string;
    key: string;
    version: string;
    description?: string;
    hook?: string;
    config?: Record<string, unknown>;
    singleton?: boolean;
    author?: string;
    logo?: string;
    readme?: string;
    routes?: ModuleRouteDef[];
    menus?: ModuleMenuDef[];
    /**
     * 插件市场终身 ID（仅市场注入，作者勿手写）
     * 无 market.sig 时忽略，按自研包安装
     */
    marketId?: string;
    /** 市场定价；与 market.sig 一致 */
    pricing?: 'free' | 'paid';
};
export type ModuleHandlerCtx = {
    body: unknown;
    query: Record<string, string>;
    params: Record<string, string>;
    headers: Headers;
    adminId?: number | string;
};
export type ModuleHandler = (ctx: ModuleHandlerCtx) => unknown | Promise<unknown>;
export type ModuleInstalled = ModuleManifest & {
    path: string;
    hasServer: boolean;
    hasWeb: boolean;
    hasHook: boolean;
    /** 席位展示（core 注入）；作者/免费 seatsLabel/usedLabel 为 / */
    seat?: {
        seatsLabel: string;
        usedLabel: string;
        blocked: boolean;
        tip?: string;
    };
};
