/** * Provider Debug Hooks - 双向数据流监控系统 * * 支持读取、写入数据和高级调试日志输出 */ import type { UnknownObject } from '../../../types/common-types.js'; import type { ProviderContext } from '../api/provider-types.js'; /** * Hook执行上下文 - 包含完整的执行信息 */ export interface HookExecutionContext extends ProviderContext { /** Hook执行阶段 */ stage: HookStage; /** 当前Hook名称 */ hookName?: string; /** 数据变化次数 */ changeCount: number; /** 开始时间戳 */ startTime: number; /** 是否启用高级调试 */ debugEnabled: boolean; /** Hook执行ID */ executionId: string; } /** * Hook数据包 - 包含数据和元数据 */ export interface HookDataPacket { /** 实际数据 */ data: UnknownObject; /** 数据元信息 */ metadata: { /** 数据类型 */ dataType: 'request' | 'response' | 'headers' | 'config' | 'auth' | 'error' | 'all'; /** 数据大小 */ size: number; /** 数据变化摘要 */ changes: DataChange[]; /** 执行时间戳 */ timestamp: number; /** Hook执行ID */ executionId: string; }; } /** * 数据变化记录 */ export interface DataChange { /** 变化类型 */ type: 'added' | 'modified' | 'removed' | 'unchanged'; /** 字段路径 */ path: string; /** 旧值 */ oldValue?: unknown; /** 新值 */ newValue?: unknown; /** 变化原因 */ reason: string; } /** * Hook阶段 */ export declare enum HookStage { INITIALIZATION = "initialization", REQUEST_PREPROCESSING = "request_preprocessing", REQUEST_VALIDATION = "request_validation", AUTHENTICATION = "authentication", HTTP_REQUEST = "http_request", HTTP_RESPONSE = "http_response", RESPONSE_VALIDATION = "response_validation", RESPONSE_POSTPROCESSING = "response_postprocessing", FINALIZATION = "finalization", ERROR_HANDLING = "error_handling" } /** * 双向Hook接口 - 支持读取和写入 */ export interface BidirectionalHook { /** Hook名称 */ name: string; /** Hook执行阶段 */ stage: HookStage; /** 目标数据类型 */ target: 'request' | 'response' | 'headers' | 'config' | 'auth' | 'error' | 'all'; /** Hook优先级 */ priority: number; /** 是否为调试Hook */ isDebugHook?: boolean; /** 读取数据 - 可以读取但不能修改 */ read?(data: HookDataPacket, context: HookExecutionContext): { observations: string[]; metrics?: Record; shouldContinue?: boolean; }; /** 写入数据 - 可以修改数据 */ write?(data: HookDataPacket, context: HookExecutionContext): { modifiedData: unknown; changes: DataChange[]; observations: string[]; metrics?: Record; }; /** 转换数据 - 可以读取、修改并返回新数据 */ transform?(data: HookDataPacket, context: HookExecutionContext): { data: unknown; changes: DataChange[]; observations: string[]; metrics?: Record; }; } /** * Hook执行结果 */ export interface HookExecutionResult { /** 处理后的数据 */ data: UnknownObject; /** 所有变化记录 */ changes: DataChange[]; /** 所有观察记录 */ observations: string[]; /** 性能指标 */ metrics: { executionTime: number; hookCount: number; readCount: number; writeCount: number; transformCount: number; }; /** 调试信息 */ debug: { hookExecutions: HookExecution[]; dataFlow: DataFlowSnapshot[]; }; } /** * 单个Hook执行记录 */ export interface HookExecution { hookName: string; stage: HookStage; executionTime: number; changes: DataChange[]; observations: string[]; hasError: boolean; errorMessage?: string; } /** * 数据流快照 */ export interface DataFlowSnapshot { stage: HookStage; data: UnknownObject; changes: DataChange[]; timestamp: number; dataSize: number; } /** * 高级调试Hook配置 */ export interface DebugHookConfig { /** 是否启用 */ enabled: boolean; /** 调试级别 */ level: 'basic' | 'detailed' | 'verbose'; /** 记录的数据大小限制 */ maxDataSize: number; /** 保存数据流的阶段 */ stages: HookStage[]; /** 输出格式 */ outputFormat: 'json' | 'structured' | 'pretty'; /** 输出目标 */ outputTargets: ('console' | 'file' | 'provider-log')[]; /** 文件输出路径 */ logFilePath?: string; /** 性能阈值 */ performanceThresholds: { maxHookExecutionTime: number; maxTotalExecutionTime: number; maxDataSize: number; }; } /** * 双向Hook管理器 */ export declare class BidirectionalHookManager { private static hooks; private static debugConfig; private static executionIdCounter; /** * 注册Hook */ static registerHook(hook: BidirectionalHook): void; /** * 执行Hook链 */ static executeHookChain(stage: HookStage, target: BidirectionalHook['target'], data: UnknownObject, context: Omit): Promise; /** * 设置调试配置 */ static setDebugConfig(config: Partial): void; /** * 获取调试配置 */ static getDebugConfig(): DebugHookConfig; /** * 计算数据大小 */ private static calculateDataSize; /** * 克隆数据(深拷贝) */ private static cloneData; } export default BidirectionalHookManager;