/** * VGrove 中间件系统 * 基于 React Router v7+ 中间件特性的路由守卫和中间件链式处理 */ import React from 'react'; import { type LoaderFunctionArgs, type ActionFunctionArgs, type Params } from 'react-router'; import type { AuthCheck } from './loaders'; import type { BaseUser } from './types'; /** * 中间件执行上下文 */ export interface MiddlewareContext { /** 请求对象 */ request: Request; /** 当前用户信息 */ user?: TUser | null; /** 路由参数 */ params: Params; /** 中间件共享数据 */ data: Record; /** 是否为 loader 调用 */ isLoader: boolean; /** 是否为 action 调用 */ isAction: boolean; } /** * 中间件执行结果 */ export interface MiddlewareResult { /** 是否继续执行后续中间件 */ continue: boolean; /** 重定向响应(如果需要) */ redirect?: Response; /** 修改后的上下文数据 */ data?: Record; /** 错误信息 */ error?: string; } /** * 中间件函数类型 */ export type MiddlewareFunction = (context: MiddlewareContext) => Promise | MiddlewareResult; /** * 中间件配置 */ export interface MiddlewareConfig { /** 中间件名称 */ name: string; /** 中间件函数 */ handler: MiddlewareFunction; /** 执行优先级(数字越小优先级越高) */ priority: number; /** 是否启用 */ enabled: boolean; /** 适用的路径模式 */ pathPatterns?: string[]; /** 排除的路径模式 */ excludePatterns?: string[]; /** 是否仅在 loader 中执行 */ loaderOnly?: boolean; /** 是否仅在 action 中执行 */ actionOnly?: boolean; } /** * 守卫失败提示配置 */ export interface GuardFailureConfig { /** 提示组件类型 */ type: 'toast' | 'modal' | 'redirect' | 'inline'; /** 提示标题 */ title?: string; /** 提示内容 */ message: string; /** 动画类型 */ animation?: 'fade' | 'slide' | 'bounce' | 'shake'; /** 动画持续时间(毫秒) */ duration?: number; /** 自动关闭时间(毫秒) */ autoClose?: number; /** 重定向路径(type 为 redirect 时) */ redirectPath?: string; /** 自定义样式类名 */ className?: string; /** 是否可关闭 */ closable?: boolean; /** 图标类型 */ icon?: 'warning' | 'shield' | 'lock' | 'custom'; /** 自定义图标 */ customIcon?: React.ReactNode; /** 操作按钮 */ actions?: Array<{ label: string; onClick: () => void; variant?: 'primary' | 'secondary' | 'danger'; }>; } /** * 中间件管理器 */ export declare class MiddlewareManager { private middlewares; private guardFailureConfigs; private globalFailureConfig; private static instance; private constructor(); static getManager(): MiddlewareManager; /** * 注册中间件 */ register(config: MiddlewareConfig): void; /** * 注销中间件 */ unregister(name: string): void; /** * 启用/禁用中间件 */ toggle(name: string, enabled: boolean): void; /** * 配置守卫失败提示 */ configureGuardFailure(guardName: string, config: GuardFailureConfig): void; /** * 配置全局守卫失败提示 */ configureGlobalGuardFailure(config: GuardFailureConfig): void; /** * 获取守卫失败配置 */ private getGuardFailureConfig; /** * 检查路径是否匹配模式 */ private matchesPattern; /** * 获取适用的中间件列表 */ private getApplicableMiddlewares; /** * 处理守卫失败 */ private handleGuardFailure; /** * 执行中间件链 */ execute(args: LoaderFunctionArgs | ActionFunctionArgs, user?: TUser | null): Promise<{ success: boolean; data?: any; response?: Response; }>; /** * 获取所有中间件信息 */ getMiddlewares(): MiddlewareConfig[]; /** * 清空所有中间件 */ clear(): void; } export declare const middlewareManager: MiddlewareManager; /** * 为 vgrove-autoroutes 生成的路由初始化中间件 * 此函数会被 vgrove-autoroutes 在生成路由代码时自动调用 */ export declare function initializeMiddlewares(): void; /** * 检查中间件管理器是否已正确初始化 */ export declare function isMiddlewareManagerReady(): boolean; /** * 获取适用于特定路径的中间件列表 * 用于调试和路由配置验证 */ export declare function getMiddlewaresForPath(pathname: string): MiddlewareConfig[]; /** * 认证中间件 */ export declare function createAuthMiddleware(authCheck: AuthCheck, options?: { priority?: number; pathPatterns?: string[]; excludePatterns?: string[]; failureConfig?: GuardFailureConfig; }): MiddlewareConfig; /** * 角色检查中间件 */ export declare function createRoleMiddleware(requiredRoles: string[], options?: { priority?: number; pathPatterns?: string[]; excludePatterns?: string[]; requireAll?: boolean; failureConfig?: GuardFailureConfig; }): MiddlewareConfig; /** * 权限检查中间件 */ export declare function createPermissionMiddleware(requiredPermissions: string[], options?: { priority?: number; pathPatterns?: string[]; excludePatterns?: string[]; requireAll?: boolean; failureConfig?: GuardFailureConfig; }): MiddlewareConfig; /** * 速率限制中间件 */ export declare function createRateLimitMiddleware(options: { maxRequests: number; windowMs: number; priority?: number; pathPatterns?: string[]; excludePatterns?: string[]; keyGenerator?: (context: MiddlewareContext) => string; }): MiddlewareConfig; /** * 注册认证中间件 */ export declare function registerAuthMiddleware(authCheck: AuthCheck, options?: Parameters>[1]): void; /** * 注册角色中间件 */ export declare function registerRoleMiddleware(requiredRoles: string[], options?: Parameters>[1]): void; /** * 注册权限中间件 */ export declare function registerPermissionMiddleware(requiredPermissions: string[], options?: Parameters>[1]): void; /** * 注册速率限制中间件 */ export declare function registerRateLimitMiddleware(options: Parameters>[0]): void; /** * 创建集成中间件的 loader */ export declare function createMiddlewareLoader(originalLoader?: (args: LoaderFunctionArgs) => any): (args: LoaderFunctionArgs) => Promise; /** * 创建集成中间件的 action */ export declare function createMiddlewareAction(originalAction?: (args: ActionFunctionArgs) => any): (args: ActionFunctionArgs) => Promise; //# sourceMappingURL=middleware.d.ts.map