claude-flow 2.7.34 → 2.7.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/bin/claude-flow +1 -1
  3. package/dist/src/__tests__/benchmarks/performance.bench.js +0 -19
  4. package/dist/src/__tests__/benchmarks/performance.bench.js.map +1 -1
  5. package/dist/src/__tests__/hook-matchers.test.js.map +1 -1
  6. package/dist/src/agents/agent-registry.js.map +1 -1
  7. package/dist/src/api/auth-service.js.map +1 -1
  8. package/dist/src/api/claude-client-enhanced.js +4 -2
  9. package/dist/src/api/claude-client-enhanced.js.map +1 -1
  10. package/dist/src/api/claude-client.js +4 -2
  11. package/dist/src/api/claude-client.js.map +1 -1
  12. package/dist/src/api/database-service.js.map +1 -1
  13. package/dist/src/api/swarm-api.js +1 -1
  14. package/dist/src/api/swarm-api.js.map +1 -1
  15. package/dist/src/cli/commands/hive-mind/wizard.js +1 -1
  16. package/dist/src/cli/commands/hive-mind/wizard.js.map +1 -1
  17. package/dist/src/cli/help-formatter.js +0 -5
  18. package/dist/src/cli/init/index.js +55 -33
  19. package/dist/src/cli/init/index.js.map +1 -1
  20. package/dist/src/cli/simple-commands/init/skills-copier.js +1 -1
  21. package/dist/src/cli/simple-commands/init/skills-copier.js.map +1 -1
  22. package/dist/src/cli/simple-orchestrator.js +1 -1
  23. package/dist/src/cli/simple-orchestrator.js.map +1 -1
  24. package/dist/src/coordination/conflict-resolution.js +1 -1
  25. package/dist/src/coordination/conflict-resolution.js.map +1 -1
  26. package/dist/src/coordination/load-balancer.js +1 -1
  27. package/dist/src/coordination/load-balancer.js.map +1 -1
  28. package/dist/src/core/DatabaseManager.js +39 -9
  29. package/dist/src/core/DatabaseManager.js.map +1 -1
  30. package/dist/src/core/config.js +1 -1
  31. package/dist/src/core/config.js.map +1 -1
  32. package/dist/src/enterprise/audit-manager.js +1 -1
  33. package/dist/src/enterprise/audit-manager.js.map +1 -1
  34. package/dist/src/providers/openai-provider.js +2 -2
  35. package/dist/src/providers/openai-provider.js.map +1 -1
  36. package/dist/src/sdk/checkpoint-manager.js +1 -1
  37. package/dist/src/sdk/checkpoint-manager.js.map +1 -1
  38. package/dist/src/services/agentic-flow-hooks/workflow-hooks.js +1 -1
  39. package/dist/src/services/agentic-flow-hooks/workflow-hooks.js.map +1 -1
  40. package/dist/src/swarm/coordinator.js +1 -1
  41. package/dist/src/swarm/coordinator.js.map +1 -1
  42. package/dist/src/utils/error-recovery.js +215 -0
  43. package/dist/src/utils/error-recovery.js.map +1 -0
  44. package/dist/src/utils/key-redactor.js.map +1 -1
  45. package/dist/src/utils/metrics-reader.js +10 -0
  46. package/dist/src/verification/rollback.js +2 -2
  47. package/dist/src/verification/rollback.js.map +1 -1
  48. package/dist/src/verification/tests/mocks/false-reporting-scenarios.test.js +4 -2
  49. package/dist/src/verification/tests/mocks/false-reporting-scenarios.test.js.map +1 -1
  50. package/docs/.claude-flow/metrics/performance.json +3 -3
  51. package/docs/.claude-flow/metrics/task-metrics.json +3 -3
  52. package/docs/architecture/README.md +555 -0
  53. package/docs/architecture/github-workflows-optimization-strategy.md +1079 -0
  54. package/docs/architecture/workflow-architecture-diagram.md +615 -0
  55. package/docs/architecture/workflow-optimization-implementation-guide.md +593 -0
  56. package/docs/features/AUTOMATIC_ERROR_RECOVERY_v2.7.35.md +321 -0
  57. package/docs/features/automatic-error-recovery.md +333 -0
  58. package/docs/fixes/WORKFLOW_FIXES.md +292 -0
  59. package/docs/fixes/WORKFLOW_FIXES_FINAL_STATUS.md +291 -0
  60. package/docs/fixes/github-workflow-fixes-pr888.md +279 -0
  61. package/docs/fixes/workflow-fixes-action-plan.md +388 -0
  62. package/docs/github-issues/README.md +88 -0
  63. package/docs/github-issues/wsl-enotempty-automatic-recovery.md +470 -0
  64. package/docs/github-workflow-fixes.md +219 -0
  65. package/docs/reviews/github-workflows-analysis-report.md +820 -0
  66. package/docs/reviews/pr-888-review-report.md +560 -0
  67. package/docs/testing/CONFIRMATION_AUTOMATIC_ERROR_RECOVERY.md +384 -0
  68. package/docs/testing/DOCKER_TEST_RESULTS_v2.7.35.md +305 -0
  69. package/docs/troubleshooting/wsl-better-sqlite3-error.md +239 -0
  70. package/docs/validation/workflow-fix-verification.md +206 -0
  71. package/package.json +7 -7
  72. package/scripts/create-github-issue.sh +64 -0
  73. package/scripts/test-docker-wsl.sh +198 -0
  74. package/src/__tests__/benchmarks/performance.bench.ts +2 -25
  75. package/src/__tests__/hook-matchers.test.ts +2 -0
  76. package/src/agents/agent-registry.ts +1 -1
  77. package/src/api/auth-service.ts +1 -1
  78. package/src/api/claude-client-enhanced.ts +2 -1
  79. package/src/api/claude-client.ts +2 -2
  80. package/src/api/database-service.ts +1 -2
  81. package/src/api/swarm-api.ts +2 -2
  82. package/src/cli/commands/hive-mind/wizard.ts +1 -1
  83. package/src/cli/init/index.ts +72 -42
  84. package/src/cli/simple-commands/init/skills-copier.js +1 -1
  85. package/src/cli/simple-orchestrator.ts +1 -1
  86. package/src/coordination/conflict-resolution.ts +1 -1
  87. package/src/coordination/load-balancer.ts +1 -1
  88. package/src/core/DatabaseManager.ts +55 -9
  89. package/src/core/config.ts +1 -1
  90. package/src/enterprise/audit-manager.ts +1 -1
  91. package/src/providers/openai-provider.ts +2 -2
  92. package/src/sdk/checkpoint-manager.ts +1 -1
  93. package/src/services/agentic-flow-hooks/workflow-hooks.ts +1 -1
  94. package/src/swarm/coordinator.ts +1 -1
  95. package/src/utils/error-recovery.ts +325 -0
  96. package/src/verification/rollback.ts +2 -2
  97. package/src/verification/tests/mocks/false-reporting-scenarios.test.ts +6 -3
  98. /package/docs/{BUG_REPORT_MEMORY_STATS.md → bug-reports/BUG_REPORT_MEMORY_STATS.md} +0 -0
  99. /package/docs/{MCP_2025_FEATURE_CONFIRMATION.md → features/MCP_2025_FEATURE_CONFIRMATION.md} +0 -0
  100. /package/docs/{OPTIONAL_LOCAL_EMBEDDINGS.md → features/OPTIONAL_LOCAL_EMBEDDINGS.md} +0 -0
  101. /package/docs/{mcp-2025-implementation-summary.md → features/mcp-2025-implementation-summary.md} +0 -0
  102. /package/docs/{mcp-spec-2025-implementation-plan.md → features/mcp-spec-2025-implementation-plan.md} +0 -0
  103. /package/docs/{AGENTIC_FLOW_ENABLED_LOG_FIX.md → fixes/AGENTIC_FLOW_ENABLED_LOG_FIX.md} +0 -0
  104. /package/docs/{MEMORY_COMMAND_FIX.md → fixes/MEMORY_COMMAND_FIX.md} +0 -0
  105. /package/docs/{NPX_MEMORY_FIX_v2.7.19.md → fixes/NPX_MEMORY_FIX_v2.7.19.md} +0 -0
  106. /package/docs/{REMOTE_INSTALL_FIX.md → fixes/REMOTE_INSTALL_FIX.md} +0 -0
  107. /package/docs/{SQLITE_FIX_COMPLETE_v2.7.21.md → fixes/SQLITE_FIX_COMPLETE_v2.7.21.md} +0 -0
  108. /package/docs/{NPM_PUBLISH_GUIDE_v2.7.33.md → guides/NPM_PUBLISH_GUIDE_v2.7.33.md} +0 -0
  109. /package/docs/{SWARM_INITIALIZATION_GUIDE.md → guides/SWARM_INITIALIZATION_GUIDE.md} +0 -0
  110. /package/docs/{AGENTDB_BRANCH_MERGE_VERIFICATION.md → integration/AGENTDB_BRANCH_MERGE_VERIFICATION.md} +0 -0
  111. /package/docs/{INTEGRATION_STATUS_FINAL.md → integration/INTEGRATION_STATUS_FINAL.md} +0 -0
  112. /package/docs/{agentic-flow-agentdb-mcp-integration.md → integration/agentic-flow-agentdb-mcp-integration.md} +0 -0
  113. /package/docs/{phase-1-2-implementation-summary.md → integration/phase-1-2-implementation-summary.md} +0 -0
  114. /package/docs/{.github-release-issue-v2.7.33.md → releases/.github-release-issue-v2.7.33.md} +0 -0
  115. /package/docs/{RELEASE_NOTES_v2.7.15.md → releases/RELEASE_NOTES_v2.7.15.md} +0 -0
  116. /package/docs/{RELEASE_NOTES_v2.7.33.md → releases/RELEASE_NOTES_v2.7.33.md} +0 -0
  117. /package/docs/{RELEASE_READINESS_SUMMARY.md → releases/RELEASE_READINESS_SUMMARY.md} +0 -0
  118. /package/docs/{RELEASE_SUMMARY_v2.7.33.md → releases/RELEASE_SUMMARY_v2.7.33.md} +0 -0
  119. /package/docs/{V2.7.14_RELEASE_NOTES.md → releases/V2.7.14_RELEASE_NOTES.md} +0 -0
  120. /package/docs/{V2.7.25_RELEASE_NOTES.md → releases/V2.7.25_RELEASE_NOTES.md} +0 -0
  121. /package/docs/{V2.7.26_RELEASE_SUMMARY.md → releases/V2.7.26_RELEASE_SUMMARY.md} +0 -0
  122. /package/docs/{V2.7.27_RELEASE_NOTES.md → releases/V2.7.27_RELEASE_NOTES.md} +0 -0
  123. /package/docs/{V2.7.28_RELEASE_NOTES.md → releases/V2.7.28_RELEASE_NOTES.md} +0 -0
  124. /package/docs/{AGENTIC_FLOW_INTEGRATION_REVIEW.md → reviews/AGENTIC_FLOW_INTEGRATION_REVIEW.md} +0 -0
  125. /package/docs/{BRANCH_REVIEW_SUMMARY.md → reviews/BRANCH_REVIEW_SUMMARY.md} +0 -0
  126. /package/docs/{DEEP_CODE_REVIEW_v2.7.33.md → reviews/DEEP_CODE_REVIEW_v2.7.33.md} +0 -0
  127. /package/docs/{LATEST_LIBRARIES_REVIEW.md → reviews/LATEST_LIBRARIES_REVIEW.md} +0 -0
  128. /package/docs/{REGRESSION_TEST_REPORT_v2.7.33.md → testing/REGRESSION_TEST_REPORT_v2.7.33.md} +0 -0
  129. /package/docs/{V2.7.27_TEST_REPORT.md → testing/V2.7.27_TEST_REPORT.md} +0 -0
  130. /package/docs/{regression-analysis-phase-1-2.md → testing/regression-analysis-phase-1-2.md} +0 -0
  131. /package/docs/{TRANSFORMER_INITIALIZATION_ISSUE.md → troubleshooting/TRANSFORMER_INITIALIZATION_ISSUE.md} +0 -0
  132. /package/docs/{FIX_VERIFICATION_MEMORY_STATS.md → validation/FIX_VERIFICATION_MEMORY_STATS.md} +0 -0
  133. /package/docs/{TOOL_VALIDATION_REPORT.md → validation/TOOL_VALIDATION_REPORT.md} +0 -0
  134. /package/docs/{VALIDATION_REPORT_v2.7.1.md → validation/VALIDATION_REPORT_v2.7.1.md} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/enterprise/audit-manager.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { writeFile, readFile, mkdir, readdir } from 'fs/promises';\nimport { join } from 'path';\nimport { createHash } from 'crypto';\nimport { Logger } from '../core/logger.js';\nimport { ConfigManager } from '../core/config.js';\n\nexport interface AuditEntry {\n id: string;\n timestamp: Date;\n eventType: string;\n category:\n | 'authentication'\n | 'authorization'\n | 'data-access'\n | 'system-change'\n | 'security'\n | 'compliance'\n | 'business';\n severity: 'low' | 'medium' | 'high' | 'critical';\n userId?: string;\n sessionId?: string;\n resource: {\n type: string;\n id: string;\n name?: string;\n path?: string;\n };\n action: string;\n outcome: 'success' | 'failure' | 'partial' | 'denied';\n details: Record<string, any>;\n context: {\n ipAddress?: string;\n userAgent?: string;\n location?: string;\n source: string;\n requestId?: string;\n };\n compliance: {\n frameworks: string[];\n controls: string[];\n retention: string;\n classification: 'public' | 'internal' | 'confidential' | 'restricted';\n };\n integrity: {\n hash: string;\n signature?: string;\n verified: boolean;\n };\n metadata: Record<string, any>;\n}\n\nexport interface ComplianceFramework {\n id: string;\n name: string;\n version: string;\n description: string;\n type: 'regulatory' | 'industry' | 'internal' | 'certification';\n requirements: ComplianceRequirement[];\n auditFrequency: 'continuous' | 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'annually';\n retentionPeriod: string;\n reportingRequirements: {\n frequency: string;\n recipients: string[];\n format: string[];\n automated: boolean;\n };\n controls: ComplianceControl[];\n status: 'active' | 'inactive' | 'pending' | 'deprecated';\n implementationDate: Date;\n nextReview: Date;\n responsible: string;\n}\n\nexport interface ComplianceRequirement {\n id: string;\n title: string;\n description: string;\n category: string;\n priority: 'low' | 'medium' | 'high' | 'critical';\n status: 'compliant' | 'non-compliant' | 'partial' | 'not-applicable' | 'pending';\n evidence: string[];\n gaps: string[];\n remediation: {\n actions: string[];\n owner: string;\n dueDate: Date;\n cost?: number;\n effort?: string;\n };\n lastAssessed: Date;\n nextAssessment: Date;\n automatedCheck: {\n enabled: boolean;\n frequency: string;\n query: string;\n threshold?: any;\n };\n}\n\nexport interface ComplianceControl {\n id: string;\n name: string;\n description: string;\n type: 'preventive' | 'detective' | 'corrective' | 'compensating';\n automationType: 'manual' | 'semi-automated' | 'automated';\n effectiveness: 'low' | 'medium' | 'high';\n frequency: string;\n owner: string;\n evidence: string[];\n testingProcedure: string;\n lastTested: Date;\n nextTest: Date;\n status: 'effective' | 'ineffective' | 'needs-improvement' | 'not-tested';\n}\n\nexport interface AuditReport {\n id: string;\n title: string;\n description: string;\n type: 'compliance' | 'security' | 'operational' | 'financial' | 'investigation' | 'custom';\n scope: {\n timeRange: { start: Date; end: Date };\n systems: string[];\n users: string[];\n events: string[];\n compliance: string[];\n };\n findings: AuditFinding[];\n recommendations: AuditRecommendation[];\n summary: {\n totalEvents: number;\n criticalFindings: number;\n complianceScore: number;\n riskLevel: 'low' | 'medium' | 'high' | 'critical';\n };\n methodology: string;\n limitations: string[];\n reviewers: string[];\n approvers: string[];\n status: 'draft' | 'under-review' | 'approved' | 'published' | 'archived';\n confidentiality: 'public' | 'internal' | 'confidential' | 'restricted';\n createdAt: Date;\n updatedAt: Date;\n createdBy: string;\n publishedAt?: Date;\n}\n\nexport interface AuditFinding {\n id: string;\n title: string;\n description: string;\n severity: 'low' | 'medium' | 'high' | 'critical';\n category: string;\n risk: string;\n impact: string;\n likelihood: string;\n evidence: AuditEvidence[];\n relatedEvents: string[];\n complianceImpact: {\n frameworks: string[];\n violations: string[];\n penalties?: string[];\n };\n remediation: {\n priority: 'low' | 'medium' | 'high' | 'immediate';\n owner: string;\n actions: string[];\n timeline: string;\n cost?: number;\n };\n status: 'open' | 'in-progress' | 'resolved' | 'accepted-risk' | 'false-positive';\n}\n\nexport interface AuditEvidence {\n id: string;\n type:\n | 'log-entry'\n | 'screenshot'\n | 'document'\n | 'system-output'\n | 'witness-statement'\n | 'data-export';\n description: string;\n source: string;\n timestamp: Date;\n hash: string;\n location: string;\n preservationStatus: 'intact' | 'modified' | 'corrupted' | 'missing';\n chainOfCustody: ChainOfCustodyEntry[];\n}\n\nexport interface ChainOfCustodyEntry {\n timestamp: Date;\n action: 'collected' | 'accessed' | 'analyzed' | 'transferred' | 'stored' | 'destroyed';\n user: string;\n reason: string;\n hash: string;\n}\n\nexport interface AuditRecommendation {\n id: string;\n title: string;\n description: string;\n priority: 'low' | 'medium' | 'high' | 'critical';\n category: 'policy' | 'process' | 'technology' | 'training' | 'governance';\n implementation: {\n effort: 'low' | 'medium' | 'high';\n cost: 'low' | 'medium' | 'high';\n timeline: string;\n dependencies: string[];\n risks: string[];\n };\n expectedBenefit: string;\n owner: string;\n status: 'proposed' | 'approved' | 'in-progress' | 'completed' | 'rejected';\n tracking: {\n milestones: string[];\n progress: number;\n nextReview: Date;\n };\n}\n\nexport interface AuditTrail {\n id: string;\n name: string;\n description: string;\n category: string;\n entries: AuditEntry[];\n configuration: {\n retention: string;\n compression: boolean;\n encryption: boolean;\n archival: {\n enabled: boolean;\n location: string;\n schedule: string;\n };\n monitoring: {\n realTime: boolean;\n alerting: boolean;\n dashboards: string[];\n };\n };\n integrity: {\n verified: boolean;\n lastVerification: Date;\n checksum: string;\n tamperEvidence: TamperEvidence[];\n };\n access: {\n viewers: string[];\n admins: string[];\n readonly: boolean;\n auditAccess: boolean;\n };\n compliance: {\n frameworks: string[];\n retention: string;\n exportRequirements: string[];\n immutable: boolean;\n };\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport interface TamperEvidence {\n timestamp: Date;\n type: 'checksum-mismatch' | 'unauthorized-access' | 'missing-entries' | 'timestamp-anomaly';\n description: string;\n severity: 'low' | 'medium' | 'high' | 'critical';\n investigationStatus: 'pending' | 'investigating' | 'resolved' | 'false-alarm';\n evidence: string[];\n}\n\nexport interface AuditConfiguration {\n general: {\n enabled: boolean;\n defaultRetention: string;\n compressionEnabled: boolean;\n encryptionEnabled: boolean;\n realTimeProcessing: boolean;\n };\n collection: {\n automaticCapture: boolean;\n bufferSize: number;\n batchSize: number;\n flushInterval: number;\n failureHandling: 'ignore' | 'retry' | 'alert' | 'stop';\n };\n storage: {\n primaryLocation: string;\n backupLocation?: string;\n archivalLocation?: string;\n partitioning: 'daily' | 'weekly' | 'monthly';\n indexing: boolean;\n };\n integrity: {\n checksumAlgorithm: 'sha256' | 'sha512' | 'blake2b';\n verificationFrequency: string;\n digitalSignatures: boolean;\n immutableStorage: boolean;\n };\n compliance: {\n frameworks: string[];\n automaticClassification: boolean;\n retentionPolicies: Record<string, string>;\n exportFormats: string[];\n };\n monitoring: {\n alerting: {\n enabled: boolean;\n channels: string[];\n thresholds: {\n failedLogins: number;\n privilegedAccess: number;\n dataExfiltration: number;\n configChanges: number;\n };\n };\n reporting: {\n automated: boolean;\n frequency: string;\n recipients: string[];\n dashboards: string[];\n };\n };\n privacy: {\n piiDetection: boolean;\n anonymization: boolean;\n masking: {\n enabled: boolean;\n patterns: string[];\n };\n consent: {\n required: boolean;\n tracking: boolean;\n };\n };\n}\n\nexport interface AuditMetrics {\n volume: {\n totalEntries: number;\n dailyAverage: number;\n peakHourly: number;\n byCategory: Record<string, number>;\n bySeverity: Record<string, number>;\n };\n compliance: {\n overallScore: number;\n byFramework: Record<\n string,\n {\n score: number;\n compliant: number;\n nonCompliant: number;\n total: number;\n }\n >;\n trending: 'improving' | 'stable' | 'declining';\n };\n integrity: {\n verificationSuccess: number;\n tamperAttempts: number;\n dataLoss: number;\n corruptionEvents: number;\n };\n performance: {\n ingestionRate: number;\n queryResponseTime: number;\n storageEfficiency: number;\n availabilityPercentage: number;\n };\n security: {\n unauthorizedAccess: number;\n privilegedActions: number;\n suspiciousPatterns: number;\n escalatedIncidents: number;\n };\n}\n\nexport class AuditManager extends EventEmitter {\n private auditTrails: Map<string, AuditTrail> = new Map();\n private frameworks: Map<string, ComplianceFramework> = new Map();\n private reports: Map<string, AuditReport> = new Map();\n private auditBuffer: AuditEntry[] = [];\n private auditPath: string;\n private logger: Logger;\n private config: ConfigManager;\n private configuration: AuditConfiguration;\n\n constructor(auditPath: string = './audit', logger?: Logger, config?: ConfigManager) {\n super();\n this.auditPath = auditPath;\n this.logger = logger || new Logger({ level: 'info', format: 'text', destination: 'console' });\n this.config = config || ConfigManager.getInstance();\n this.configuration = this.getDefaultConfiguration();\n }\n\n async initialize(): Promise<void> {\n try {\n await mkdir(this.auditPath, { recursive: true });\n await mkdir(join(this.auditPath, 'trails'), { recursive: true });\n await mkdir(join(this.auditPath, 'frameworks'), { recursive: true });\n await mkdir(join(this.auditPath, 'reports'), { recursive: true });\n await mkdir(join(this.auditPath, 'evidence'), { recursive: true });\n await mkdir(join(this.auditPath, 'exports'), { recursive: true });\n\n await this.loadConfigurations();\n await this.initializeDefaultFrameworks();\n await this.startAuditProcessing();\n\n this.logger.info('Audit Manager initialized successfully');\n } catch (error) {\n this.logger.error('Failed to initialize Audit Manager', { error });\n throw error;\n }\n }\n\n async logAuditEvent(eventData: {\n eventType: string;\n category: AuditEntry['category'];\n severity?: AuditEntry['severity'];\n userId?: string;\n sessionId?: string;\n resource: AuditEntry['resource'];\n action: string;\n outcome: AuditEntry['outcome'];\n details: Record<string, any>;\n context: Partial<AuditEntry['context']>;\n compliance?: {\n frameworks?: string[];\n controls?: string[];\n classification?: AuditEntry['compliance']['classification'];\n };\n }): Promise<AuditEntry> {\n const entry: AuditEntry = {\n id: `audit-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n timestamp: new Date(),\n eventType: eventData.eventType,\n category: eventData.category,\n severity: eventData.severity || 'medium',\n userId: eventData.userId,\n sessionId: eventData.sessionId,\n resource: eventData.resource,\n action: eventData.action,\n outcome: eventData.outcome,\n details: eventData.details,\n context: {\n source: 'system',\n ...eventData.context,\n },\n compliance: {\n frameworks: eventData.compliance?.frameworks || [],\n controls: eventData.compliance?.controls || [],\n retention: this.calculateRetentionPeriod(\n eventData.category,\n eventData.compliance?.frameworks,\n ),\n classification: eventData.compliance?.classification || 'internal',\n },\n integrity: {\n hash: '',\n verified: false,\n },\n metadata: {},\n };\n\n // Calculate integrity hash\n entry.integrity.hash = this.calculateHash(entry);\n entry.integrity.verified = true;\n\n // Add to buffer for batch processing\n this.auditBuffer.push(entry);\n\n // Immediate processing for critical events\n if (entry.severity === 'critical') {\n await this.processAuditEntry(entry);\n await this.generateSecurityAlert(entry);\n }\n\n // Batch process if buffer is full\n if (this.auditBuffer.length >= this.configuration.collection.batchSize) {\n await this.flushAuditBuffer();\n }\n\n this.emit('audit:logged', entry);\n return entry;\n }\n\n async createComplianceFramework(frameworkData: {\n name: string;\n version: string;\n description: string;\n type: ComplianceFramework['type'];\n requirements: Omit<ComplianceRequirement, 'id'>[];\n controls: Omit<ComplianceControl, 'id'>[];\n auditFrequency: ComplianceFramework['auditFrequency'];\n retentionPeriod: string;\n responsible: string;\n }): Promise<ComplianceFramework> {\n const framework: ComplianceFramework = {\n id: `framework-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n name: frameworkData.name,\n version: frameworkData.version,\n description: frameworkData.description,\n type: frameworkData.type,\n requirements: frameworkData.requirements.map((req, index) => ({\n id: `req-${Date.now()}-${index}`,\n ...req,\n automatedCheck: {\n enabled: false,\n frequency: 'daily',\n query: '',\n ...req.automatedCheck,\n },\n })),\n auditFrequency: frameworkData.auditFrequency,\n retentionPeriod: frameworkData.retentionPeriod,\n reportingRequirements: {\n frequency: 'quarterly',\n recipients: [],\n format: ['pdf', 'json'],\n automated: false,\n },\n controls: frameworkData.controls.map((control, index) => ({\n id: `control-${Date.now()}-${index}`,\n ...control,\n })),\n status: 'active',\n implementationDate: new Date(),\n nextReview: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000), // 1 year\n responsible: frameworkData.responsible,\n };\n\n this.frameworks.set(framework.id, framework);\n await this.saveFramework(framework);\n\n await this.logAuditEvent({\n eventType: 'compliance_framework_created',\n category: 'compliance',\n severity: 'medium',\n resource: { type: 'compliance-framework', id: framework.id, name: framework.name },\n action: 'create',\n outcome: 'success',\n details: { frameworkType: framework.type, requirementsCount: framework.requirements.length },\n context: { source: 'audit-manager' },\n compliance: { frameworks: [framework.id] },\n });\n\n this.emit('framework:created', framework);\n this.logger.info(`Compliance framework created: ${framework.name} (${framework.id})`);\n\n return framework;\n }\n\n async generateAuditReport(reportConfig: {\n title: string;\n description: string;\n type: AuditReport['type'];\n scope: AuditReport['scope'];\n includeRecommendations?: boolean;\n confidentiality?: AuditReport['confidentiality'];\n }): Promise<AuditReport> {\n const report: AuditReport = {\n id: `report-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n title: reportConfig.title,\n description: reportConfig.description,\n type: reportConfig.type,\n scope: reportConfig.scope,\n findings: [],\n recommendations: [],\n summary: {\n totalEvents: 0,\n criticalFindings: 0,\n complianceScore: 0,\n riskLevel: 'low',\n },\n methodology: 'Automated analysis of audit trail data with manual review of findings',\n limitations: [],\n reviewers: [],\n approvers: [],\n status: 'draft',\n confidentiality: reportConfig.confidentiality || 'internal',\n createdAt: new Date(),\n updatedAt: new Date(),\n createdBy: 'audit-manager',\n };\n\n // Collect relevant audit entries\n const auditEntries = await this.queryAuditEntries(reportConfig.scope);\n report.summary.totalEvents = auditEntries.length;\n\n // Analyze entries for findings\n const findings = await this.analyzeAuditEntries(auditEntries, reportConfig.type);\n report.findings = findings;\n report.summary.criticalFindings = findings.filter((f) => f.severity === 'critical').length;\n\n // Calculate compliance score\n if (reportConfig.scope.compliance && reportConfig.scope.compliance.length > 0) {\n report.summary.complianceScore = await this.calculateComplianceScore(\n reportConfig.scope.compliance,\n auditEntries,\n );\n }\n\n // Determine risk level\n report.summary.riskLevel = this.calculateRiskLevel(findings);\n\n // Generate recommendations\n if (reportConfig.includeRecommendations !== false) {\n report.recommendations = await this.generateRecommendations(findings, reportConfig.type);\n }\n\n this.reports.set(report.id, report);\n await this.saveReport(report);\n\n await this.logAuditEvent({\n eventType: 'audit_report_generated',\n category: 'compliance',\n severity: 'medium',\n resource: { type: 'audit-report', id: report.id, name: report.title },\n action: 'generate',\n outcome: 'success',\n details: {\n reportType: report.type,\n totalEvents: report.summary.totalEvents,\n findingsCount: report.findings.length,\n complianceScore: report.summary.complianceScore,\n },\n context: { source: 'audit-manager' },\n compliance: { frameworks: reportConfig.scope.compliance || [] },\n });\n\n this.emit('report:generated', report);\n this.logger.info(`Audit report generated: ${report.title} (${report.id})`);\n\n return report;\n }\n\n async exportAuditData(exportConfig: {\n format: 'json' | 'csv' | 'xml' | 'pdf';\n scope: {\n timeRange: { start: Date; end: Date };\n categories?: string[];\n severity?: string[];\n users?: string[];\n };\n destination: string;\n encryption?: boolean;\n compression?: boolean;\n }): Promise<string> {\n const entries = await this.queryAuditEntries(exportConfig.scope);\n\n let exportData: string;\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n const filename = `audit-export-${timestamp}.${exportConfig.format}`;\n const filepath = join(this.auditPath, 'exports', filename);\n\n switch (exportConfig.format) {\n case 'json':\n exportData = JSON.stringify(entries, null, 2);\n break;\n case 'csv':\n exportData = this.convertToCSV(entries);\n break;\n case 'xml':\n exportData = this.convertToXML(entries);\n break;\n case 'pdf':\n exportData = await this.convertToPDF(entries);\n break;\n default:\n throw new Error(`Unsupported export format: ${exportConfig.format}`);\n }\n\n // Apply compression if requested\n if (exportConfig.compression) {\n // Would implement compression here\n }\n\n // Apply encryption if requested\n if (exportConfig.encryption) {\n // Would implement encryption here\n }\n\n await writeFile(filepath, exportData);\n\n await this.logAuditEvent({\n eventType: 'audit_data_exported',\n category: 'data-access',\n severity: 'medium',\n resource: { type: 'audit-data', id: 'export', path: filepath },\n action: 'export',\n outcome: 'success',\n details: {\n format: exportConfig.format,\n recordCount: entries.length,\n timeRange: exportConfig.scope.timeRange,\n compressed: exportConfig.compression || false,\n encrypted: exportConfig.encryption || false,\n },\n context: { source: 'audit-manager' },\n });\n\n this.emit('data:exported', {\n filepath,\n format: exportConfig.format,\n recordCount: entries.length,\n });\n this.logger.info(`Audit data exported: ${filename} (${entries.length} records)`);\n\n return filepath;\n }\n\n async verifyAuditIntegrity(trailId?: string): Promise<{\n verified: boolean;\n issues: TamperEvidence[];\n summary: {\n totalEntries: number;\n verifiedEntries: number;\n corruptedEntries: number;\n missingEntries: number;\n };\n }> {\n const issues: TamperEvidence[] = [];\n let totalEntries = 0;\n let verifiedEntries = 0;\n let corruptedEntries = 0;\n let missingEntries = 0;\n\n const trails = trailId\n ? ([this.auditTrails.get(trailId)].filter(Boolean) as AuditTrail[])\n : Array.from(this.auditTrails.values());\n\n for (const trail of trails) {\n for (const entry of trail.entries) {\n totalEntries++;\n\n // Verify hash\n const calculatedHash = this.calculateHash(entry);\n if (calculatedHash === entry.integrity.hash) {\n verifiedEntries++;\n } else {\n corruptedEntries++;\n issues.push({\n timestamp: new Date(),\n type: 'checksum-mismatch',\n description: `Hash mismatch for audit entry ${entry.id}`,\n severity: 'high',\n investigationStatus: 'pending',\n evidence: [`Expected: ${entry.integrity.hash}`, `Calculated: ${calculatedHash}`],\n });\n }\n }\n\n // Update trail integrity status\n trail.integrity.verified = issues.length === 0;\n trail.integrity.lastVerification = new Date();\n trail.integrity.tamperEvidence = issues;\n\n await this.saveAuditTrail(trail);\n }\n\n const verified = issues.length === 0;\n\n await this.logAuditEvent({\n eventType: 'audit_integrity_verification',\n category: 'security',\n severity: verified ? 'low' : 'high',\n resource: { type: 'audit-trail', id: trailId || 'all' },\n action: 'verify',\n outcome: verified ? 'success' : 'failure',\n details: {\n totalEntries,\n verifiedEntries,\n corruptedEntries,\n issuesFound: issues.length,\n },\n context: { source: 'audit-manager' },\n });\n\n if (!verified) {\n this.emit('integrity:compromised', {\n issues,\n summary: { totalEntries, verifiedEntries, corruptedEntries, missingEntries },\n });\n this.logger.error(`Audit integrity verification failed: ${issues.length} issues found`);\n } else {\n this.logger.info(`Audit integrity verification successful: ${totalEntries} entries verified`);\n }\n\n return {\n verified,\n issues,\n summary: { totalEntries, verifiedEntries, corruptedEntries, missingEntries },\n };\n }\n\n async getAuditMetrics(timeRange?: { start: Date; end: Date }): Promise<AuditMetrics> {\n const range = timeRange || {\n start: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000), // Last 30 days\n end: new Date(),\n };\n\n const entries = await this.queryAuditEntries({ timeRange: range });\n\n // Volume metrics\n const volumeMetrics = {\n totalEntries: entries.length,\n dailyAverage: entries.length / 30,\n peakHourly: this.calculatePeakHourly(entries),\n byCategory: this.groupBy(entries, 'category'),\n bySeverity: this.groupBy(entries, 'severity'),\n };\n\n // Compliance metrics\n const complianceMetrics = {\n overallScore: 85, // Would be calculated from actual compliance data\n byFramework: {} as Record<string, any>,\n trending: 'stable' as const,\n };\n\n // Calculate compliance scores by framework\n for (const framework of this.frameworks.values()) {\n const score = await this.calculateComplianceScore([framework.id], entries);\n complianceMetrics.byFramework[framework.id] = {\n score,\n compliant: framework.requirements.filter((r) => r.status === 'compliant').length,\n nonCompliant: framework.requirements.filter((r) => r.status === 'non-compliant').length,\n total: framework.requirements.length,\n };\n }\n\n // Integrity metrics\n const integrityMetrics = {\n verificationSuccess: 99.5,\n tamperAttempts: entries.filter((e) => e.eventType === 'unauthorized_access').length,\n dataLoss: 0,\n corruptionEvents: 0,\n };\n\n // Performance metrics\n const performanceMetrics = {\n ingestionRate: entries.length / 24, // entries per hour\n queryResponseTime: 150, // ms\n storageEfficiency: 85, // percentage\n availabilityPercentage: 99.9,\n };\n\n // Security metrics\n const securityMetrics = {\n unauthorizedAccess: entries.filter(\n (e) => e.outcome === 'denied' || e.eventType === 'unauthorized_access',\n ).length,\n privilegedActions: entries.filter((e) => e.details.privileged === true).length,\n suspiciousPatterns: entries.filter((e) => e.severity === 'critical').length,\n escalatedIncidents: entries.filter(\n (e) => e.category === 'security' && e.severity === 'critical',\n ).length,\n };\n\n return {\n volume: volumeMetrics,\n compliance: complianceMetrics,\n integrity: integrityMetrics,\n performance: performanceMetrics,\n security: securityMetrics,\n };\n }\n\n // Private helper methods\n private getDefaultConfiguration(): AuditConfiguration {\n return {\n general: {\n enabled: true,\n defaultRetention: '7y',\n compressionEnabled: true,\n encryptionEnabled: true,\n realTimeProcessing: true,\n },\n collection: {\n automaticCapture: true,\n bufferSize: 10000,\n batchSize: 1000,\n flushInterval: 60000,\n failureHandling: 'retry',\n },\n storage: {\n primaryLocation: join(this.auditPath, 'trails'),\n partitioning: 'daily',\n indexing: true,\n },\n integrity: {\n checksumAlgorithm: 'sha256',\n verificationFrequency: 'daily',\n digitalSignatures: false,\n immutableStorage: true,\n },\n compliance: {\n frameworks: [],\n automaticClassification: true,\n retentionPolicies: {\n authentication: '3y',\n 'data-access': '7y',\n 'system-change': '5y',\n security: '7y',\n compliance: '10y',\n },\n exportFormats: ['json', 'csv', 'pdf'],\n },\n monitoring: {\n alerting: {\n enabled: true,\n channels: ['email', 'webhook'],\n thresholds: {\n failedLogins: 5,\n privilegedAccess: 10,\n dataExfiltration: 1,\n configChanges: 20,\n },\n },\n reporting: {\n automated: true,\n frequency: 'weekly',\n recipients: [],\n dashboards: [],\n },\n },\n privacy: {\n piiDetection: true,\n anonymization: false,\n masking: {\n enabled: true,\n patterns: ['\\\\b\\\\d{4}[- ]?\\\\d{4}[- ]?\\\\d{4}[- ]?\\\\d{4}\\\\b'], // Credit card pattern\n },\n consent: {\n required: false,\n tracking: false,\n },\n },\n };\n }\n\n private async loadConfigurations(): Promise<void> {\n try {\n // Load frameworks\n const frameworkFiles = await readdir(join(this.auditPath, 'frameworks'));\n for (const file of frameworkFiles.filter((f) => f.endsWith('.json'))) {\n const content = await readFile(join(this.auditPath, 'frameworks', file), 'utf-8');\n const framework: ComplianceFramework = JSON.parse(content);\n this.frameworks.set(framework.id, framework);\n }\n\n // Load audit trails\n const trailFiles = await readdir(join(this.auditPath, 'trails'));\n for (const file of trailFiles.filter((f) => f.endsWith('.json'))) {\n const content = await readFile(join(this.auditPath, 'trails', file), 'utf-8');\n const trail: AuditTrail = JSON.parse(content);\n this.auditTrails.set(trail.id, trail);\n }\n\n // Load reports\n const reportFiles = await readdir(join(this.auditPath, 'reports'));\n for (const file of reportFiles.filter((f) => f.endsWith('.json'))) {\n const content = await readFile(join(this.auditPath, 'reports', file), 'utf-8');\n const report: AuditReport = JSON.parse(content);\n this.reports.set(report.id, report);\n }\n\n this.logger.info(\n `Loaded ${this.frameworks.size} frameworks, ${this.auditTrails.size} trails, ${this.reports.size} reports`,\n );\n } catch (error) {\n this.logger.warn('Failed to load some audit configurations', { error });\n }\n }\n\n private async initializeDefaultFrameworks(): Promise<void> {\n const defaultFrameworks = [\n {\n name: 'SOC 2 Type II',\n version: '2017',\n description: 'Service Organization Control 2 Type II compliance framework',\n type: 'certification' as const,\n requirements: [\n {\n title: 'Security Principle - Logical and Physical Access Controls',\n description: 'The entity restricts logical and physical access to the system',\n category: 'access-control',\n priority: 'high' as const,\n status: 'compliant' as const,\n evidence: [],\n gaps: [],\n remediation: {\n actions: [],\n owner: 'security-team',\n dueDate: new Date(Date.now() + 90 * 24 * 60 * 60 * 1000),\n },\n lastAssessed: new Date(),\n nextAssessment: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000),\n automatedCheck: {\n enabled: true,\n frequency: 'daily',\n query: 'category:authentication AND outcome:failure',\n threshold: 10,\n },\n },\n ],\n controls: [\n {\n name: 'Multi-Factor Authentication',\n description: 'MFA is required for all user accounts',\n type: 'preventive' as const,\n automationType: 'automated' as const,\n effectiveness: 'high' as const,\n frequency: 'continuous',\n owner: 'security-team',\n evidence: [],\n testingProcedure: 'Verify MFA is enabled for all user accounts',\n lastTested: new Date(),\n nextTest: new Date(Date.now() + 90 * 24 * 60 * 60 * 1000),\n status: 'effective' as const,\n },\n ],\n auditFrequency: 'quarterly' as const,\n retentionPeriod: '7y',\n responsible: 'compliance-officer',\n },\n {\n name: 'GDPR',\n version: '2018',\n description: 'General Data Protection Regulation compliance framework',\n type: 'regulatory' as const,\n requirements: [\n {\n title: 'Data Processing Records',\n description: 'Maintain records of all data processing activities',\n category: 'data-protection',\n priority: 'critical' as const,\n status: 'compliant' as const,\n evidence: [],\n gaps: [],\n remediation: {\n actions: [],\n owner: 'data-protection-officer',\n dueDate: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000),\n },\n lastAssessed: new Date(),\n nextAssessment: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000),\n automatedCheck: {\n enabled: true,\n frequency: 'daily',\n query: 'category:data-access AND details.pii:true',\n },\n },\n ],\n controls: [],\n auditFrequency: 'annually' as const,\n retentionPeriod: '6y',\n responsible: 'data-protection-officer',\n },\n ];\n\n for (const frameworkData of defaultFrameworks) {\n if (!Array.from(this.frameworks.values()).some((f) => f.name === frameworkData.name)) {\n await this.createComplianceFramework(frameworkData);\n }\n }\n }\n\n private async startAuditProcessing(): Promise<void> {\n // Start buffer flush timer\n setInterval(async () => {\n if (this.auditBuffer.length > 0) {\n await this.flushAuditBuffer();\n }\n }, this.configuration.collection.flushInterval);\n\n // Start integrity verification timer\n setInterval(\n async () => {\n await this.verifyAuditIntegrity();\n },\n 24 * 60 * 60 * 1000,\n ); // Daily\n\n this.logger.info('Started audit processing timers');\n }\n\n private async flushAuditBuffer(): Promise<void> {\n if (this.auditBuffer.length === 0) return;\n\n const entries = [...this.auditBuffer];\n this.auditBuffer = [];\n\n try {\n for (const entry of entries) {\n await this.processAuditEntry(entry);\n }\n\n this.logger.debug(`Flushed ${entries.length} audit entries`);\n } catch (error) {\n this.logger.error('Failed to flush audit buffer', { error });\n\n // Re-add entries to buffer for retry if configured\n if (this.configuration.collection.failureHandling === 'retry') {\n this.auditBuffer.unshift(...entries);\n }\n }\n }\n\n private async processAuditEntry(entry: AuditEntry): Promise<void> {\n // Determine which trail to add the entry to\n const trailId = this.determineAuditTrail(entry);\n let trail = this.auditTrails.get(trailId);\n\n if (!trail) {\n trail = await this.createAuditTrail(trailId, entry.category);\n }\n\n // Add entry to trail\n trail.entries.push(entry);\n trail.updatedAt = new Date();\n\n // Update trail integrity\n trail.integrity.checksum = this.calculateTrailChecksum(trail);\n trail.integrity.lastVerification = new Date();\n\n await this.saveAuditTrail(trail);\n\n // Check for compliance violations\n await this.checkComplianceViolations(entry);\n\n // Check for security alerts\n await this.checkSecurityAlerts(entry);\n }\n\n private determineAuditTrail(entry: AuditEntry): string {\n // Use category and date for trail determination\n const date = entry.timestamp.toISOString().split('T')[0];\n return `${entry.category}-${date}`;\n }\n\n private async createAuditTrail(id: string, category: string): Promise<AuditTrail> {\n const trail: AuditTrail = {\n id,\n name: `${category} audit trail`,\n description: `Audit trail for ${category} events`,\n category,\n entries: [],\n configuration: {\n retention:\n this.configuration.compliance.retentionPolicies[category] ||\n this.configuration.general.defaultRetention,\n compression: this.configuration.general.compressionEnabled,\n encryption: this.configuration.general.encryptionEnabled,\n archival: {\n enabled: true,\n location: join(this.auditPath, 'archive'),\n schedule: 'yearly',\n },\n monitoring: {\n realTime: this.configuration.general.realTimeProcessing,\n alerting: this.configuration.monitoring.alerting.enabled,\n dashboards: [],\n },\n },\n integrity: {\n verified: true,\n lastVerification: new Date(),\n checksum: '',\n tamperEvidence: [],\n },\n access: {\n viewers: [],\n admins: ['audit-admin'],\n readonly: false,\n auditAccess: true,\n },\n compliance: {\n frameworks: [],\n retention:\n this.configuration.compliance.retentionPolicies[category] ||\n this.configuration.general.defaultRetention,\n exportRequirements: [],\n immutable: this.configuration.integrity.immutableStorage,\n },\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n\n this.auditTrails.set(trail.id, trail);\n await this.saveAuditTrail(trail);\n\n return trail;\n }\n\n private calculateHash(entry: AuditEntry): string {\n // Create a deterministic string representation of the entry\n const data = {\n timestamp: entry.timestamp.toISOString(),\n eventType: entry.eventType,\n category: entry.category,\n userId: entry.userId,\n resource: entry.resource,\n action: entry.action,\n outcome: entry.outcome,\n details: entry.details,\n };\n\n return createHash(this.configuration.integrity.checksumAlgorithm)\n .update(JSON.stringify(data))\n .digest('hex');\n }\n\n private calculateTrailChecksum(trail: AuditTrail): string {\n const data = trail.entries.map((e) => e.integrity.hash).join('');\n return createHash(this.configuration.integrity.checksumAlgorithm).update(data).digest('hex');\n }\n\n private calculateRetentionPeriod(category: string, frameworks?: string[]): string {\n const categoryRetention = this.configuration.compliance.retentionPolicies[category];\n if (categoryRetention) return categoryRetention;\n\n // Check framework requirements\n if (frameworks) {\n let maxRetention = this.configuration.general.defaultRetention;\n for (const frameworkId of frameworks) {\n const framework = this.frameworks.get(frameworkId);\n if (\n framework &&\n this.parseRetentionPeriod(framework.retentionPeriod) >\n this.parseRetentionPeriod(maxRetention)\n ) {\n maxRetention = framework.retentionPeriod;\n }\n }\n return maxRetention;\n }\n\n return this.configuration.general.defaultRetention;\n }\n\n private parseRetentionPeriod(period: string): number {\n const match = period.match(/(\\d+)([ymd])/);\n if (!match) return 0;\n\n const value = parseInt(match[1]);\n const unit = match[2];\n\n switch (unit) {\n case 'y':\n return value * 365;\n case 'm':\n return value * 30;\n case 'd':\n return value;\n default:\n return 0;\n }\n }\n\n private async queryAuditEntries(scope: {\n timeRange?: { start: Date; end: Date };\n categories?: string[];\n severity?: string[];\n users?: string[];\n events?: string[];\n compliance?: string[];\n }): Promise<AuditEntry[]> {\n let entries: AuditEntry[] = [];\n\n // Collect entries from all trails\n for (const trail of this.auditTrails.values()) {\n entries.push(...trail.entries);\n }\n\n // Apply filters\n if (scope.timeRange) {\n entries = entries.filter(\n (e) => e.timestamp >= scope.timeRange!.start && e.timestamp <= scope.timeRange!.end,\n );\n }\n\n if (scope.categories) {\n entries = entries.filter((e) => scope.categories!.includes(e.category));\n }\n\n if (scope.severity) {\n entries = entries.filter((e) => scope.severity!.includes(e.severity));\n }\n\n if (scope.users) {\n entries = entries.filter((e) => e.userId && scope.users!.includes(e.userId));\n }\n\n if (scope.events) {\n entries = entries.filter((e) => scope.events!.includes(e.eventType));\n }\n\n if (scope.compliance) {\n entries = entries.filter((e) =>\n e.compliance.frameworks.some((f) => scope.compliance!.includes(f)),\n );\n }\n\n return entries.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());\n }\n\n private async analyzeAuditEntries(\n entries: AuditEntry[],\n reportType: string,\n ): Promise<AuditFinding[]> {\n const findings: AuditFinding[] = [];\n\n // Security-focused analysis\n if (reportType === 'security') {\n // Check for failed login patterns\n const failedLogins = entries.filter(\n (e) => e.eventType === 'user_login' && e.outcome === 'failure',\n );\n\n if (failedLogins.length > 10) {\n findings.push({\n id: `finding-${Date.now()}-1`,\n title: 'Excessive Failed Login Attempts',\n description: `${failedLogins.length} failed login attempts detected`,\n severity: 'high',\n category: 'authentication',\n risk: 'Potential brute force attack',\n impact: 'Unauthorized access attempt',\n likelihood: 'medium',\n evidence: [],\n relatedEvents: failedLogins.map((e) => e.id),\n complianceImpact: {\n frameworks: ['SOC2'],\n violations: ['Access Control'],\n penalties: [],\n },\n remediation: {\n priority: 'high',\n owner: 'security-team',\n actions: ['Implement account lockout', 'Enable MFA', 'Review access logs'],\n timeline: '7 days',\n },\n status: 'open',\n });\n }\n }\n\n // Compliance-focused analysis\n if (reportType === 'compliance') {\n // Check for data access patterns\n const dataAccess = entries.filter(\n (e) => e.category === 'data-access' && e.details.pii === true,\n );\n\n if (dataAccess.length > 0) {\n findings.push({\n id: `finding-${Date.now()}-2`,\n title: 'PII Data Access Events',\n description: `${dataAccess.length} events involving PII data access`,\n severity: 'medium',\n category: 'data-protection',\n risk: 'Privacy compliance risk',\n impact: 'Potential GDPR violation',\n likelihood: 'low',\n evidence: [],\n relatedEvents: dataAccess.map((e) => e.id),\n complianceImpact: {\n frameworks: ['GDPR'],\n violations: ['Data Processing'],\n penalties: ['Administrative fine'],\n },\n remediation: {\n priority: 'medium',\n owner: 'data-protection-officer',\n actions: ['Review data access justification', 'Update privacy notices'],\n timeline: '30 days',\n },\n status: 'open',\n });\n }\n }\n\n return findings;\n }\n\n private async calculateComplianceScore(\n frameworks: string[],\n entries: AuditEntry[],\n ): Promise<number> {\n let totalRequirements = 0;\n let metRequirements = 0;\n\n for (const frameworkId of frameworks) {\n const framework = this.frameworks.get(frameworkId);\n if (!framework) continue;\n\n for (const requirement of framework.requirements) {\n totalRequirements++;\n\n if (requirement.status === 'compliant') {\n metRequirements++;\n } else if (requirement.automatedCheck.enabled) {\n // Check if automated requirement is met based on audit data\n const violations = this.checkAutomatedRequirement(requirement, entries);\n if (violations.length === 0) {\n metRequirements++;\n }\n }\n }\n }\n\n return totalRequirements > 0 ? (metRequirements / totalRequirements) * 100 : 0;\n }\n\n private checkAutomatedRequirement(\n requirement: ComplianceRequirement,\n entries: AuditEntry[],\n ): AuditEntry[] {\n // Simplified automated compliance checking\n // In a real implementation, this would parse the query and evaluate against entries\n const violations = entries.filter((e) => {\n if (requirement.automatedCheck.query.includes('outcome:failure')) {\n return e.outcome === 'failure';\n }\n return false;\n });\n\n return violations;\n }\n\n private calculateRiskLevel(findings: AuditFinding[]): 'low' | 'medium' | 'high' | 'critical' {\n const criticalFindings = findings.filter((f) => f.severity === 'critical').length;\n const highFindings = findings.filter((f) => f.severity === 'high').length;\n\n if (criticalFindings > 0) return 'critical';\n if (highFindings > 2) return 'high';\n if (findings.length > 5) return 'medium';\n return 'low';\n }\n\n private async generateRecommendations(\n findings: AuditFinding[],\n reportType: string,\n ): Promise<AuditRecommendation[]> {\n const recommendations: AuditRecommendation[] = [];\n\n // Generic security recommendations\n if (findings.some((f) => f.category === 'authentication')) {\n recommendations.push({\n id: `rec-${Date.now()}-1`,\n title: 'Strengthen Authentication Controls',\n description: 'Implement additional authentication security measures',\n priority: 'high',\n category: 'technology',\n implementation: {\n effort: 'medium',\n cost: 'medium',\n timeline: '30 days',\n dependencies: ['Identity Provider Integration'],\n risks: ['User experience impact'],\n },\n expectedBenefit: 'Reduced risk of unauthorized access',\n owner: 'security-team',\n status: 'proposed',\n tracking: {\n milestones: ['MFA deployment', 'Policy update', 'User training'],\n progress: 0,\n nextReview: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000),\n },\n });\n }\n\n return recommendations;\n }\n\n private async checkComplianceViolations(entry: AuditEntry): Promise<void> {\n for (const frameworkId of entry.compliance.frameworks) {\n const framework = this.frameworks.get(frameworkId);\n if (!framework) continue;\n\n for (const requirement of framework.requirements) {\n if (requirement.automatedCheck.enabled) {\n const violations = this.checkAutomatedRequirement(requirement, [entry]);\n if (violations.length > 0) {\n this.emit('compliance:violation', {\n framework: frameworkId,\n requirement: requirement.id,\n entry,\n severity: requirement.priority,\n });\n }\n }\n }\n }\n }\n\n private async checkSecurityAlerts(entry: AuditEntry): Promise<void> {\n const thresholds = this.configuration.monitoring.alerting.thresholds;\n\n // Check for specific alert conditions\n if (entry.eventType === 'user_login' && entry.outcome === 'failure') {\n // Would implement failed login threshold checking\n }\n\n if (entry.category === 'data-access' && entry.details.privileged) {\n this.emit('security:alert', {\n type: 'privileged-access',\n entry,\n severity: 'medium',\n });\n }\n }\n\n private async generateSecurityAlert(entry: AuditEntry): Promise<void> {\n this.emit('security:critical', {\n entry,\n message: `Critical security event: ${entry.eventType}`,\n action: 'immediate-review-required',\n });\n }\n\n private calculatePeakHourly(entries: AuditEntry[]): number {\n const hourlyBuckets: Record<string, number> = {};\n\n for (const entry of entries) {\n const hour = entry.timestamp.toISOString().substr(0, 13); // YYYY-MM-DDTHH\n hourlyBuckets[hour] = (hourlyBuckets[hour] || 0) + 1;\n }\n\n return Math.max(...Object.values(hourlyBuckets), 0);\n }\n\n private groupBy<T>(array: T[], key: keyof T): Record<string, number> {\n return array.reduce(\n (groups, item) => {\n const value = String(item[key]);\n groups[value] = (groups[value] || 0) + 1;\n return groups;\n },\n {} as Record<string, number>,\n );\n }\n\n private convertToCSV(entries: AuditEntry[]): string {\n const headers = [\n 'timestamp',\n 'eventType',\n 'category',\n 'severity',\n 'userId',\n 'action',\n 'outcome',\n 'resource',\n ];\n const rows = entries.map((entry) => [\n entry.timestamp.toISOString(),\n entry.eventType,\n entry.category,\n entry.severity,\n entry.userId || '',\n entry.action,\n entry.outcome,\n `${entry.resource.type}:${entry.resource.id}`,\n ]);\n\n return [headers, ...rows].map((row) => row.join(',')).join('\\n');\n }\n\n private convertToXML(entries: AuditEntry[]): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<auditEntries>\\n';\n\n for (const entry of entries) {\n xml += ` <entry id=\"${entry.id}\">\\n`;\n xml += ` <timestamp>${entry.timestamp.toISOString()}</timestamp>\\n`;\n xml += ` <eventType>${entry.eventType}</eventType>\\n`;\n xml += ` <category>${entry.category}</category>\\n`;\n xml += ` <severity>${entry.severity}</severity>\\n`;\n xml += ` <action>${entry.action}</action>\\n`;\n xml += ` <outcome>${entry.outcome}</outcome>\\n`;\n xml += ` </entry>\\n`;\n }\n\n xml += '</auditEntries>';\n return xml;\n }\n\n private async convertToPDF(entries: AuditEntry[]): Promise<string> {\n // Would implement PDF generation\n return 'PDF generation not implemented';\n }\n\n private async saveFramework(framework: ComplianceFramework): Promise<void> {\n const filePath = join(this.auditPath, 'frameworks', `${framework.id}.json`);\n await writeFile(filePath, JSON.stringify(framework, null, 2));\n }\n\n private async saveAuditTrail(trail: AuditTrail): Promise<void> {\n const filePath = join(this.auditPath, 'trails', `${trail.id}.json`);\n await writeFile(filePath, JSON.stringify(trail, null, 2));\n }\n\n private async saveReport(report: AuditReport): Promise<void> {\n const filePath = join(this.auditPath, 'reports', `${report.id}.json`);\n await writeFile(filePath, JSON.stringify(report, null, 2));\n }\n}\n"],"names":["EventEmitter","writeFile","readFile","mkdir","readdir","join","createHash","Logger","ConfigManager","AuditManager","auditTrails","Map","frameworks","reports","auditBuffer","auditPath","logger","config","configuration","level","format","destination","getInstance","getDefaultConfiguration","initialize","recursive","loadConfigurations","initializeDefaultFrameworks","startAuditProcessing","info","error","logAuditEvent","eventData","entry","id","Date","now","Math","random","toString","substr","timestamp","eventType","category","severity","userId","sessionId","resource","action","outcome","details","context","source","compliance","controls","retention","calculateRetentionPeriod","classification","integrity","hash","verified","metadata","calculateHash","push","processAuditEntry","generateSecurityAlert","length","collection","batchSize","flushAuditBuffer","emit","createComplianceFramework","frameworkData","framework","name","version","description","type","requirements","map","req","index","automatedCheck","enabled","frequency","query","auditFrequency","retentionPeriod","reportingRequirements","recipients","automated","control","status","implementationDate","nextReview","responsible","set","saveFramework","frameworkType","requirementsCount","generateAuditReport","reportConfig","report","title","scope","findings","recommendations","summary","totalEvents","criticalFindings","complianceScore","riskLevel","methodology","limitations","reviewers","approvers","confidentiality","createdAt","updatedAt","createdBy","auditEntries","queryAuditEntries","analyzeAuditEntries","filter","f","calculateComplianceScore","calculateRiskLevel","includeRecommendations","generateRecommendations","saveReport","reportType","findingsCount","exportAuditData","exportConfig","entries","exportData","toISOString","replace","filename","filepath","JSON","stringify","convertToCSV","convertToXML","convertToPDF","Error","compression","encryption","path","recordCount","timeRange","compressed","encrypted","verifyAuditIntegrity","trailId","issues","totalEntries","verifiedEntries","corruptedEntries","missingEntries","trails","get","Boolean","Array","from","values","trail","calculatedHash","investigationStatus","evidence","lastVerification","tamperEvidence","saveAuditTrail","issuesFound","getAuditMetrics","range","start","end","volumeMetrics","dailyAverage","peakHourly","calculatePeakHourly","byCategory","groupBy","bySeverity","complianceMetrics","overallScore","byFramework","trending","score","compliant","r","nonCompliant","total","integrityMetrics","verificationSuccess","tamperAttempts","e","dataLoss","corruptionEvents","performanceMetrics","ingestionRate","queryResponseTime","storageEfficiency","availabilityPercentage","securityMetrics","unauthorizedAccess","privilegedActions","privileged","suspiciousPatterns","escalatedIncidents","volume","performance","security","general","defaultRetention","compressionEnabled","encryptionEnabled","realTimeProcessing","automaticCapture","bufferSize","flushInterval","failureHandling","storage","primaryLocation","partitioning","indexing","checksumAlgorithm","verificationFrequency","digitalSignatures","immutableStorage","automaticClassification","retentionPolicies","authentication","exportFormats","monitoring","alerting","channels","thresholds","failedLogins","privilegedAccess","dataExfiltration","configChanges","reporting","dashboards","privacy","piiDetection","anonymization","masking","patterns","consent","required","tracking","frameworkFiles","file","endsWith","content","parse","trailFiles","reportFiles","size","warn","defaultFrameworks","priority","gaps","remediation","actions","owner","dueDate","lastAssessed","nextAssessment","threshold","automationType","effectiveness","testingProcedure","lastTested","nextTest","some","setInterval","debug","unshift","determineAuditTrail","createAuditTrail","checksum","calculateTrailChecksum","checkComplianceViolations","checkSecurityAlerts","date","split","archival","location","schedule","realTime","access","viewers","admins","readonly","auditAccess","exportRequirements","immutable","data","update","digest","categoryRetention","maxRetention","frameworkId","parseRetentionPeriod","period","match","value","parseInt","unit","categories","includes","users","events","sort","a","b","getTime","risk","impact","likelihood","relatedEvents","complianceImpact","violations","penalties","timeline","dataAccess","pii","totalRequirements","metRequirements","requirement","checkAutomatedRequirement","highFindings","implementation","effort","cost","dependencies","risks","expectedBenefit","milestones","progress","message","hourlyBuckets","hour","max","Object","array","key","reduce","groups","item","String","headers","rows","row","xml","filePath"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/enterprise/audit-manager.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { writeFile, readFile, mkdir, readdir } from 'fs/promises';\nimport { join } from 'path';\nimport { createHash } from 'crypto';\nimport { Logger } from '../core/logger.js';\nimport { ConfigManager } from '../core/config.js';\n\nexport interface AuditEntry {\n id: string;\n timestamp: Date;\n eventType: string;\n category:\n | 'authentication'\n | 'authorization'\n | 'data-access'\n | 'system-change'\n | 'security'\n | 'compliance'\n | 'business';\n severity: 'low' | 'medium' | 'high' | 'critical';\n userId?: string;\n sessionId?: string;\n resource: {\n type: string;\n id: string;\n name?: string;\n path?: string;\n };\n action: string;\n outcome: 'success' | 'failure' | 'partial' | 'denied';\n details: Record<string, any>;\n context: {\n ipAddress?: string;\n userAgent?: string;\n location?: string;\n source: string;\n requestId?: string;\n };\n compliance: {\n frameworks: string[];\n controls: string[];\n retention: string;\n classification: 'public' | 'internal' | 'confidential' | 'restricted';\n };\n integrity: {\n hash: string;\n signature?: string;\n verified: boolean;\n };\n metadata: Record<string, any>;\n}\n\nexport interface ComplianceFramework {\n id: string;\n name: string;\n version: string;\n description: string;\n type: 'regulatory' | 'industry' | 'internal' | 'certification';\n requirements: ComplianceRequirement[];\n auditFrequency: 'continuous' | 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'annually';\n retentionPeriod: string;\n reportingRequirements: {\n frequency: string;\n recipients: string[];\n format: string[];\n automated: boolean;\n };\n controls: ComplianceControl[];\n status: 'active' | 'inactive' | 'pending' | 'deprecated';\n implementationDate: Date;\n nextReview: Date;\n responsible: string;\n}\n\nexport interface ComplianceRequirement {\n id: string;\n title: string;\n description: string;\n category: string;\n priority: 'low' | 'medium' | 'high' | 'critical';\n status: 'compliant' | 'non-compliant' | 'partial' | 'not-applicable' | 'pending';\n evidence: string[];\n gaps: string[];\n remediation: {\n actions: string[];\n owner: string;\n dueDate: Date;\n cost?: number;\n effort?: string;\n };\n lastAssessed: Date;\n nextAssessment: Date;\n automatedCheck: {\n enabled: boolean;\n frequency: string;\n query: string;\n threshold?: any;\n };\n}\n\nexport interface ComplianceControl {\n id: string;\n name: string;\n description: string;\n type: 'preventive' | 'detective' | 'corrective' | 'compensating';\n automationType: 'manual' | 'semi-automated' | 'automated';\n effectiveness: 'low' | 'medium' | 'high';\n frequency: string;\n owner: string;\n evidence: string[];\n testingProcedure: string;\n lastTested: Date;\n nextTest: Date;\n status: 'effective' | 'ineffective' | 'needs-improvement' | 'not-tested';\n}\n\nexport interface AuditReport {\n id: string;\n title: string;\n description: string;\n type: 'compliance' | 'security' | 'operational' | 'financial' | 'investigation' | 'custom';\n scope: {\n timeRange: { start: Date; end: Date };\n systems: string[];\n users: string[];\n events: string[];\n compliance: string[];\n };\n findings: AuditFinding[];\n recommendations: AuditRecommendation[];\n summary: {\n totalEvents: number;\n criticalFindings: number;\n complianceScore: number;\n riskLevel: 'low' | 'medium' | 'high' | 'critical';\n };\n methodology: string;\n limitations: string[];\n reviewers: string[];\n approvers: string[];\n status: 'draft' | 'under-review' | 'approved' | 'published' | 'archived';\n confidentiality: 'public' | 'internal' | 'confidential' | 'restricted';\n createdAt: Date;\n updatedAt: Date;\n createdBy: string;\n publishedAt?: Date;\n}\n\nexport interface AuditFinding {\n id: string;\n title: string;\n description: string;\n severity: 'low' | 'medium' | 'high' | 'critical';\n category: string;\n risk: string;\n impact: string;\n likelihood: string;\n evidence: AuditEvidence[];\n relatedEvents: string[];\n complianceImpact: {\n frameworks: string[];\n violations: string[];\n penalties?: string[];\n };\n remediation: {\n priority: 'low' | 'medium' | 'high' | 'immediate';\n owner: string;\n actions: string[];\n timeline: string;\n cost?: number;\n };\n status: 'open' | 'in-progress' | 'resolved' | 'accepted-risk' | 'false-positive';\n}\n\nexport interface AuditEvidence {\n id: string;\n type:\n | 'log-entry'\n | 'screenshot'\n | 'document'\n | 'system-output'\n | 'witness-statement'\n | 'data-export';\n description: string;\n source: string;\n timestamp: Date;\n hash: string;\n location: string;\n preservationStatus: 'intact' | 'modified' | 'corrupted' | 'missing';\n chainOfCustody: ChainOfCustodyEntry[];\n}\n\nexport interface ChainOfCustodyEntry {\n timestamp: Date;\n action: 'collected' | 'accessed' | 'analyzed' | 'transferred' | 'stored' | 'destroyed';\n user: string;\n reason: string;\n hash: string;\n}\n\nexport interface AuditRecommendation {\n id: string;\n title: string;\n description: string;\n priority: 'low' | 'medium' | 'high' | 'critical';\n category: 'policy' | 'process' | 'technology' | 'training' | 'governance';\n implementation: {\n effort: 'low' | 'medium' | 'high';\n cost: 'low' | 'medium' | 'high';\n timeline: string;\n dependencies: string[];\n risks: string[];\n };\n expectedBenefit: string;\n owner: string;\n status: 'proposed' | 'approved' | 'in-progress' | 'completed' | 'rejected';\n tracking: {\n milestones: string[];\n progress: number;\n nextReview: Date;\n };\n}\n\nexport interface AuditTrail {\n id: string;\n name: string;\n description: string;\n category: string;\n entries: AuditEntry[];\n configuration: {\n retention: string;\n compression: boolean;\n encryption: boolean;\n archival: {\n enabled: boolean;\n location: string;\n schedule: string;\n };\n monitoring: {\n realTime: boolean;\n alerting: boolean;\n dashboards: string[];\n };\n };\n integrity: {\n verified: boolean;\n lastVerification: Date;\n checksum: string;\n tamperEvidence: TamperEvidence[];\n };\n access: {\n viewers: string[];\n admins: string[];\n readonly: boolean;\n auditAccess: boolean;\n };\n compliance: {\n frameworks: string[];\n retention: string;\n exportRequirements: string[];\n immutable: boolean;\n };\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport interface TamperEvidence {\n timestamp: Date;\n type: 'checksum-mismatch' | 'unauthorized-access' | 'missing-entries' | 'timestamp-anomaly';\n description: string;\n severity: 'low' | 'medium' | 'high' | 'critical';\n investigationStatus: 'pending' | 'investigating' | 'resolved' | 'false-alarm';\n evidence: string[];\n}\n\nexport interface AuditConfiguration {\n general: {\n enabled: boolean;\n defaultRetention: string;\n compressionEnabled: boolean;\n encryptionEnabled: boolean;\n realTimeProcessing: boolean;\n };\n collection: {\n automaticCapture: boolean;\n bufferSize: number;\n batchSize: number;\n flushInterval: number;\n failureHandling: 'ignore' | 'retry' | 'alert' | 'stop';\n };\n storage: {\n primaryLocation: string;\n backupLocation?: string;\n archivalLocation?: string;\n partitioning: 'daily' | 'weekly' | 'monthly';\n indexing: boolean;\n };\n integrity: {\n checksumAlgorithm: 'sha256' | 'sha512' | 'blake2b';\n verificationFrequency: string;\n digitalSignatures: boolean;\n immutableStorage: boolean;\n };\n compliance: {\n frameworks: string[];\n automaticClassification: boolean;\n retentionPolicies: Record<string, string>;\n exportFormats: string[];\n };\n monitoring: {\n alerting: {\n enabled: boolean;\n channels: string[];\n thresholds: {\n failedLogins: number;\n privilegedAccess: number;\n dataExfiltration: number;\n configChanges: number;\n };\n };\n reporting: {\n automated: boolean;\n frequency: string;\n recipients: string[];\n dashboards: string[];\n };\n };\n privacy: {\n piiDetection: boolean;\n anonymization: boolean;\n masking: {\n enabled: boolean;\n patterns: string[];\n };\n consent: {\n required: boolean;\n tracking: boolean;\n };\n };\n}\n\nexport interface AuditMetrics {\n volume: {\n totalEntries: number;\n dailyAverage: number;\n peakHourly: number;\n byCategory: Record<string, number>;\n bySeverity: Record<string, number>;\n };\n compliance: {\n overallScore: number;\n byFramework: Record<\n string,\n {\n score: number;\n compliant: number;\n nonCompliant: number;\n total: number;\n }\n >;\n trending: 'improving' | 'stable' | 'declining';\n };\n integrity: {\n verificationSuccess: number;\n tamperAttempts: number;\n dataLoss: number;\n corruptionEvents: number;\n };\n performance: {\n ingestionRate: number;\n queryResponseTime: number;\n storageEfficiency: number;\n availabilityPercentage: number;\n };\n security: {\n unauthorizedAccess: number;\n privilegedActions: number;\n suspiciousPatterns: number;\n escalatedIncidents: number;\n };\n}\n\nexport class AuditManager extends EventEmitter {\n private auditTrails: Map<string, AuditTrail> = new Map();\n private frameworks: Map<string, ComplianceFramework> = new Map();\n private reports: Map<string, AuditReport> = new Map();\n private auditBuffer: AuditEntry[] = [];\n private auditPath: string;\n private logger: Logger;\n private config: ConfigManager;\n private configuration: AuditConfiguration;\n\n constructor(auditPath: string = './audit', logger?: Logger, config?: ConfigManager) {\n super();\n this.auditPath = auditPath;\n this.logger = logger || new Logger({ level: 'info', format: 'text', destination: 'console' });\n this.config = config || ConfigManager.getInstance();\n this.configuration = this.getDefaultConfiguration();\n }\n\n async initialize(): Promise<void> {\n try {\n await mkdir(this.auditPath, { recursive: true });\n await mkdir(join(this.auditPath, 'trails'), { recursive: true });\n await mkdir(join(this.auditPath, 'frameworks'), { recursive: true });\n await mkdir(join(this.auditPath, 'reports'), { recursive: true });\n await mkdir(join(this.auditPath, 'evidence'), { recursive: true });\n await mkdir(join(this.auditPath, 'exports'), { recursive: true });\n\n await this.loadConfigurations();\n await this.initializeDefaultFrameworks();\n await this.startAuditProcessing();\n\n this.logger.info('Audit Manager initialized successfully');\n } catch (error) {\n this.logger.error('Failed to initialize Audit Manager', { error });\n throw error;\n }\n }\n\n async logAuditEvent(eventData: {\n eventType: string;\n category: AuditEntry['category'];\n severity?: AuditEntry['severity'];\n userId?: string;\n sessionId?: string;\n resource: AuditEntry['resource'];\n action: string;\n outcome: AuditEntry['outcome'];\n details: Record<string, any>;\n context: Partial<AuditEntry['context']>;\n compliance?: {\n frameworks?: string[];\n controls?: string[];\n classification?: AuditEntry['compliance']['classification'];\n };\n }): Promise<AuditEntry> {\n const entry: AuditEntry = {\n id: `audit-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n timestamp: new Date(),\n eventType: eventData.eventType,\n category: eventData.category,\n severity: eventData.severity || 'medium',\n userId: eventData.userId,\n sessionId: eventData.sessionId,\n resource: eventData.resource,\n action: eventData.action,\n outcome: eventData.outcome,\n details: eventData.details,\n context: {\n source: 'system',\n ...eventData.context,\n },\n compliance: {\n frameworks: eventData.compliance?.frameworks || [],\n controls: eventData.compliance?.controls || [],\n retention: this.calculateRetentionPeriod(\n eventData.category,\n eventData.compliance?.frameworks,\n ),\n classification: eventData.compliance?.classification || 'internal',\n },\n integrity: {\n hash: '',\n verified: false,\n },\n metadata: {},\n };\n\n // Calculate integrity hash\n entry.integrity.hash = this.calculateHash(entry);\n entry.integrity.verified = true;\n\n // Add to buffer for batch processing\n this.auditBuffer.push(entry);\n\n // Immediate processing for critical events\n if (entry.severity === 'critical') {\n await this.processAuditEntry(entry);\n await this.generateSecurityAlert(entry);\n }\n\n // Batch process if buffer is full\n if (this.auditBuffer.length >= this.configuration.collection.batchSize) {\n await this.flushAuditBuffer();\n }\n\n this.emit('audit:logged', entry);\n return entry;\n }\n\n async createComplianceFramework(frameworkData: {\n name: string;\n version: string;\n description: string;\n type: ComplianceFramework['type'];\n requirements: Omit<ComplianceRequirement, 'id'>[];\n controls: Omit<ComplianceControl, 'id'>[];\n auditFrequency: ComplianceFramework['auditFrequency'];\n retentionPeriod: string;\n responsible: string;\n }): Promise<ComplianceFramework> {\n const framework: ComplianceFramework = {\n id: `framework-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n name: frameworkData.name,\n version: frameworkData.version,\n description: frameworkData.description,\n type: frameworkData.type,\n requirements: frameworkData.requirements.map((req, index) => ({\n id: `req-${Date.now()}-${index}`,\n ...req,\n automatedCheck: {\n enabled: false,\n frequency: 'daily',\n query: '',\n ...req.automatedCheck,\n },\n })),\n auditFrequency: frameworkData.auditFrequency,\n retentionPeriod: frameworkData.retentionPeriod,\n reportingRequirements: {\n frequency: 'quarterly',\n recipients: [],\n format: ['pdf', 'json'],\n automated: false,\n },\n controls: frameworkData.controls.map((control, index) => ({\n id: `control-${Date.now()}-${index}`,\n ...control,\n })),\n status: 'active',\n implementationDate: new Date(),\n nextReview: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000), // 1 year\n responsible: frameworkData.responsible,\n };\n\n this.frameworks.set(framework.id, framework);\n await this.saveFramework(framework);\n\n await this.logAuditEvent({\n eventType: 'compliance_framework_created',\n category: 'compliance',\n severity: 'medium',\n resource: { type: 'compliance-framework', id: framework.id, name: framework.name },\n action: 'create',\n outcome: 'success',\n details: { frameworkType: framework.type, requirementsCount: framework.requirements.length },\n context: { source: 'audit-manager' },\n compliance: { frameworks: [framework.id] },\n });\n\n this.emit('framework:created', framework);\n this.logger.info(`Compliance framework created: ${framework.name} (${framework.id})`);\n\n return framework;\n }\n\n async generateAuditReport(reportConfig: {\n title: string;\n description: string;\n type: AuditReport['type'];\n scope: AuditReport['scope'];\n includeRecommendations?: boolean;\n confidentiality?: AuditReport['confidentiality'];\n }): Promise<AuditReport> {\n const report: AuditReport = {\n id: `report-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n title: reportConfig.title,\n description: reportConfig.description,\n type: reportConfig.type,\n scope: reportConfig.scope,\n findings: [],\n recommendations: [],\n summary: {\n totalEvents: 0,\n criticalFindings: 0,\n complianceScore: 0,\n riskLevel: 'low',\n },\n methodology: 'Automated analysis of audit trail data with manual review of findings',\n limitations: [],\n reviewers: [],\n approvers: [],\n status: 'draft',\n confidentiality: reportConfig.confidentiality || 'internal',\n createdAt: new Date(),\n updatedAt: new Date(),\n createdBy: 'audit-manager',\n };\n\n // Collect relevant audit entries\n const auditEntries = await this.queryAuditEntries(reportConfig.scope);\n report.summary.totalEvents = auditEntries.length;\n\n // Analyze entries for findings\n const findings = await this.analyzeAuditEntries(auditEntries, reportConfig.type);\n report.findings = findings;\n report.summary.criticalFindings = findings.filter((f) => f.severity === 'critical').length;\n\n // Calculate compliance score\n if (reportConfig.scope.compliance && reportConfig.scope.compliance.length > 0) {\n report.summary.complianceScore = await this.calculateComplianceScore(\n reportConfig.scope.compliance,\n auditEntries,\n );\n }\n\n // Determine risk level\n report.summary.riskLevel = this.calculateRiskLevel(findings);\n\n // Generate recommendations\n if (reportConfig.includeRecommendations !== false) {\n report.recommendations = await this.generateRecommendations(findings, reportConfig.type);\n }\n\n this.reports.set(report.id, report);\n await this.saveReport(report);\n\n await this.logAuditEvent({\n eventType: 'audit_report_generated',\n category: 'compliance',\n severity: 'medium',\n resource: { type: 'audit-report', id: report.id, name: report.title },\n action: 'generate',\n outcome: 'success',\n details: {\n reportType: report.type,\n totalEvents: report.summary.totalEvents,\n findingsCount: report.findings.length,\n complianceScore: report.summary.complianceScore,\n },\n context: { source: 'audit-manager' },\n compliance: { frameworks: reportConfig.scope.compliance || [] },\n });\n\n this.emit('report:generated', report);\n this.logger.info(`Audit report generated: ${report.title} (${report.id})`);\n\n return report;\n }\n\n async exportAuditData(exportConfig: {\n format: 'json' | 'csv' | 'xml' | 'pdf';\n scope: {\n timeRange: { start: Date; end: Date };\n categories?: string[];\n severity?: string[];\n users?: string[];\n };\n destination: string;\n encryption?: boolean;\n compression?: boolean;\n }): Promise<string> {\n const entries = await this.queryAuditEntries(exportConfig.scope);\n\n let exportData: string;\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n const filename = `audit-export-${timestamp}.${exportConfig.format}`;\n const filepath = join(this.auditPath, 'exports', filename);\n\n switch (exportConfig.format) {\n case 'json':\n exportData = JSON.stringify(entries, null, 2);\n break;\n case 'csv':\n exportData = this.convertToCSV(entries);\n break;\n case 'xml':\n exportData = this.convertToXML(entries);\n break;\n case 'pdf':\n exportData = await this.convertToPDF(entries);\n break;\n default:\n throw new Error(`Unsupported export format: ${exportConfig.format}`);\n }\n\n // Apply compression if requested\n if (exportConfig.compression) {\n // Would implement compression here\n }\n\n // Apply encryption if requested\n if (exportConfig.encryption) {\n // Would implement encryption here\n }\n\n await writeFile(filepath, exportData);\n\n await this.logAuditEvent({\n eventType: 'audit_data_exported',\n category: 'data-access',\n severity: 'medium',\n resource: { type: 'audit-data', id: 'export', path: filepath },\n action: 'export',\n outcome: 'success',\n details: {\n format: exportConfig.format,\n recordCount: entries.length,\n timeRange: exportConfig.scope.timeRange,\n compressed: exportConfig.compression || false,\n encrypted: exportConfig.encryption || false,\n },\n context: { source: 'audit-manager' },\n });\n\n this.emit('data:exported', {\n filepath,\n format: exportConfig.format,\n recordCount: entries.length,\n });\n this.logger.info(`Audit data exported: ${filename} (${entries.length} records)`);\n\n return filepath;\n }\n\n async verifyAuditIntegrity(trailId?: string): Promise<{\n verified: boolean;\n issues: TamperEvidence[];\n summary: {\n totalEntries: number;\n verifiedEntries: number;\n corruptedEntries: number;\n missingEntries: number;\n };\n }> {\n const issues: TamperEvidence[] = [];\n let totalEntries = 0;\n let verifiedEntries = 0;\n let corruptedEntries = 0;\n const missingEntries = 0;\n\n const trails = trailId\n ? ([this.auditTrails.get(trailId)].filter(Boolean) as AuditTrail[])\n : Array.from(this.auditTrails.values());\n\n for (const trail of trails) {\n for (const entry of trail.entries) {\n totalEntries++;\n\n // Verify hash\n const calculatedHash = this.calculateHash(entry);\n if (calculatedHash === entry.integrity.hash) {\n verifiedEntries++;\n } else {\n corruptedEntries++;\n issues.push({\n timestamp: new Date(),\n type: 'checksum-mismatch',\n description: `Hash mismatch for audit entry ${entry.id}`,\n severity: 'high',\n investigationStatus: 'pending',\n evidence: [`Expected: ${entry.integrity.hash}`, `Calculated: ${calculatedHash}`],\n });\n }\n }\n\n // Update trail integrity status\n trail.integrity.verified = issues.length === 0;\n trail.integrity.lastVerification = new Date();\n trail.integrity.tamperEvidence = issues;\n\n await this.saveAuditTrail(trail);\n }\n\n const verified = issues.length === 0;\n\n await this.logAuditEvent({\n eventType: 'audit_integrity_verification',\n category: 'security',\n severity: verified ? 'low' : 'high',\n resource: { type: 'audit-trail', id: trailId || 'all' },\n action: 'verify',\n outcome: verified ? 'success' : 'failure',\n details: {\n totalEntries,\n verifiedEntries,\n corruptedEntries,\n issuesFound: issues.length,\n },\n context: { source: 'audit-manager' },\n });\n\n if (!verified) {\n this.emit('integrity:compromised', {\n issues,\n summary: { totalEntries, verifiedEntries, corruptedEntries, missingEntries },\n });\n this.logger.error(`Audit integrity verification failed: ${issues.length} issues found`);\n } else {\n this.logger.info(`Audit integrity verification successful: ${totalEntries} entries verified`);\n }\n\n return {\n verified,\n issues,\n summary: { totalEntries, verifiedEntries, corruptedEntries, missingEntries },\n };\n }\n\n async getAuditMetrics(timeRange?: { start: Date; end: Date }): Promise<AuditMetrics> {\n const range = timeRange || {\n start: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000), // Last 30 days\n end: new Date(),\n };\n\n const entries = await this.queryAuditEntries({ timeRange: range });\n\n // Volume metrics\n const volumeMetrics = {\n totalEntries: entries.length,\n dailyAverage: entries.length / 30,\n peakHourly: this.calculatePeakHourly(entries),\n byCategory: this.groupBy(entries, 'category'),\n bySeverity: this.groupBy(entries, 'severity'),\n };\n\n // Compliance metrics\n const complianceMetrics = {\n overallScore: 85, // Would be calculated from actual compliance data\n byFramework: {} as Record<string, any>,\n trending: 'stable' as const,\n };\n\n // Calculate compliance scores by framework\n for (const framework of this.frameworks.values()) {\n const score = await this.calculateComplianceScore([framework.id], entries);\n complianceMetrics.byFramework[framework.id] = {\n score,\n compliant: framework.requirements.filter((r) => r.status === 'compliant').length,\n nonCompliant: framework.requirements.filter((r) => r.status === 'non-compliant').length,\n total: framework.requirements.length,\n };\n }\n\n // Integrity metrics\n const integrityMetrics = {\n verificationSuccess: 99.5,\n tamperAttempts: entries.filter((e) => e.eventType === 'unauthorized_access').length,\n dataLoss: 0,\n corruptionEvents: 0,\n };\n\n // Performance metrics\n const performanceMetrics = {\n ingestionRate: entries.length / 24, // entries per hour\n queryResponseTime: 150, // ms\n storageEfficiency: 85, // percentage\n availabilityPercentage: 99.9,\n };\n\n // Security metrics\n const securityMetrics = {\n unauthorizedAccess: entries.filter(\n (e) => e.outcome === 'denied' || e.eventType === 'unauthorized_access',\n ).length,\n privilegedActions: entries.filter((e) => e.details.privileged === true).length,\n suspiciousPatterns: entries.filter((e) => e.severity === 'critical').length,\n escalatedIncidents: entries.filter(\n (e) => e.category === 'security' && e.severity === 'critical',\n ).length,\n };\n\n return {\n volume: volumeMetrics,\n compliance: complianceMetrics,\n integrity: integrityMetrics,\n performance: performanceMetrics,\n security: securityMetrics,\n };\n }\n\n // Private helper methods\n private getDefaultConfiguration(): AuditConfiguration {\n return {\n general: {\n enabled: true,\n defaultRetention: '7y',\n compressionEnabled: true,\n encryptionEnabled: true,\n realTimeProcessing: true,\n },\n collection: {\n automaticCapture: true,\n bufferSize: 10000,\n batchSize: 1000,\n flushInterval: 60000,\n failureHandling: 'retry',\n },\n storage: {\n primaryLocation: join(this.auditPath, 'trails'),\n partitioning: 'daily',\n indexing: true,\n },\n integrity: {\n checksumAlgorithm: 'sha256',\n verificationFrequency: 'daily',\n digitalSignatures: false,\n immutableStorage: true,\n },\n compliance: {\n frameworks: [],\n automaticClassification: true,\n retentionPolicies: {\n authentication: '3y',\n 'data-access': '7y',\n 'system-change': '5y',\n security: '7y',\n compliance: '10y',\n },\n exportFormats: ['json', 'csv', 'pdf'],\n },\n monitoring: {\n alerting: {\n enabled: true,\n channels: ['email', 'webhook'],\n thresholds: {\n failedLogins: 5,\n privilegedAccess: 10,\n dataExfiltration: 1,\n configChanges: 20,\n },\n },\n reporting: {\n automated: true,\n frequency: 'weekly',\n recipients: [],\n dashboards: [],\n },\n },\n privacy: {\n piiDetection: true,\n anonymization: false,\n masking: {\n enabled: true,\n patterns: ['\\\\b\\\\d{4}[- ]?\\\\d{4}[- ]?\\\\d{4}[- ]?\\\\d{4}\\\\b'], // Credit card pattern\n },\n consent: {\n required: false,\n tracking: false,\n },\n },\n };\n }\n\n private async loadConfigurations(): Promise<void> {\n try {\n // Load frameworks\n const frameworkFiles = await readdir(join(this.auditPath, 'frameworks'));\n for (const file of frameworkFiles.filter((f) => f.endsWith('.json'))) {\n const content = await readFile(join(this.auditPath, 'frameworks', file), 'utf-8');\n const framework: ComplianceFramework = JSON.parse(content);\n this.frameworks.set(framework.id, framework);\n }\n\n // Load audit trails\n const trailFiles = await readdir(join(this.auditPath, 'trails'));\n for (const file of trailFiles.filter((f) => f.endsWith('.json'))) {\n const content = await readFile(join(this.auditPath, 'trails', file), 'utf-8');\n const trail: AuditTrail = JSON.parse(content);\n this.auditTrails.set(trail.id, trail);\n }\n\n // Load reports\n const reportFiles = await readdir(join(this.auditPath, 'reports'));\n for (const file of reportFiles.filter((f) => f.endsWith('.json'))) {\n const content = await readFile(join(this.auditPath, 'reports', file), 'utf-8');\n const report: AuditReport = JSON.parse(content);\n this.reports.set(report.id, report);\n }\n\n this.logger.info(\n `Loaded ${this.frameworks.size} frameworks, ${this.auditTrails.size} trails, ${this.reports.size} reports`,\n );\n } catch (error) {\n this.logger.warn('Failed to load some audit configurations', { error });\n }\n }\n\n private async initializeDefaultFrameworks(): Promise<void> {\n const defaultFrameworks = [\n {\n name: 'SOC 2 Type II',\n version: '2017',\n description: 'Service Organization Control 2 Type II compliance framework',\n type: 'certification' as const,\n requirements: [\n {\n title: 'Security Principle - Logical and Physical Access Controls',\n description: 'The entity restricts logical and physical access to the system',\n category: 'access-control',\n priority: 'high' as const,\n status: 'compliant' as const,\n evidence: [],\n gaps: [],\n remediation: {\n actions: [],\n owner: 'security-team',\n dueDate: new Date(Date.now() + 90 * 24 * 60 * 60 * 1000),\n },\n lastAssessed: new Date(),\n nextAssessment: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000),\n automatedCheck: {\n enabled: true,\n frequency: 'daily',\n query: 'category:authentication AND outcome:failure',\n threshold: 10,\n },\n },\n ],\n controls: [\n {\n name: 'Multi-Factor Authentication',\n description: 'MFA is required for all user accounts',\n type: 'preventive' as const,\n automationType: 'automated' as const,\n effectiveness: 'high' as const,\n frequency: 'continuous',\n owner: 'security-team',\n evidence: [],\n testingProcedure: 'Verify MFA is enabled for all user accounts',\n lastTested: new Date(),\n nextTest: new Date(Date.now() + 90 * 24 * 60 * 60 * 1000),\n status: 'effective' as const,\n },\n ],\n auditFrequency: 'quarterly' as const,\n retentionPeriod: '7y',\n responsible: 'compliance-officer',\n },\n {\n name: 'GDPR',\n version: '2018',\n description: 'General Data Protection Regulation compliance framework',\n type: 'regulatory' as const,\n requirements: [\n {\n title: 'Data Processing Records',\n description: 'Maintain records of all data processing activities',\n category: 'data-protection',\n priority: 'critical' as const,\n status: 'compliant' as const,\n evidence: [],\n gaps: [],\n remediation: {\n actions: [],\n owner: 'data-protection-officer',\n dueDate: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000),\n },\n lastAssessed: new Date(),\n nextAssessment: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000),\n automatedCheck: {\n enabled: true,\n frequency: 'daily',\n query: 'category:data-access AND details.pii:true',\n },\n },\n ],\n controls: [],\n auditFrequency: 'annually' as const,\n retentionPeriod: '6y',\n responsible: 'data-protection-officer',\n },\n ];\n\n for (const frameworkData of defaultFrameworks) {\n if (!Array.from(this.frameworks.values()).some((f) => f.name === frameworkData.name)) {\n await this.createComplianceFramework(frameworkData);\n }\n }\n }\n\n private async startAuditProcessing(): Promise<void> {\n // Start buffer flush timer\n setInterval(async () => {\n if (this.auditBuffer.length > 0) {\n await this.flushAuditBuffer();\n }\n }, this.configuration.collection.flushInterval);\n\n // Start integrity verification timer\n setInterval(\n async () => {\n await this.verifyAuditIntegrity();\n },\n 24 * 60 * 60 * 1000,\n ); // Daily\n\n this.logger.info('Started audit processing timers');\n }\n\n private async flushAuditBuffer(): Promise<void> {\n if (this.auditBuffer.length === 0) return;\n\n const entries = [...this.auditBuffer];\n this.auditBuffer = [];\n\n try {\n for (const entry of entries) {\n await this.processAuditEntry(entry);\n }\n\n this.logger.debug(`Flushed ${entries.length} audit entries`);\n } catch (error) {\n this.logger.error('Failed to flush audit buffer', { error });\n\n // Re-add entries to buffer for retry if configured\n if (this.configuration.collection.failureHandling === 'retry') {\n this.auditBuffer.unshift(...entries);\n }\n }\n }\n\n private async processAuditEntry(entry: AuditEntry): Promise<void> {\n // Determine which trail to add the entry to\n const trailId = this.determineAuditTrail(entry);\n let trail = this.auditTrails.get(trailId);\n\n if (!trail) {\n trail = await this.createAuditTrail(trailId, entry.category);\n }\n\n // Add entry to trail\n trail.entries.push(entry);\n trail.updatedAt = new Date();\n\n // Update trail integrity\n trail.integrity.checksum = this.calculateTrailChecksum(trail);\n trail.integrity.lastVerification = new Date();\n\n await this.saveAuditTrail(trail);\n\n // Check for compliance violations\n await this.checkComplianceViolations(entry);\n\n // Check for security alerts\n await this.checkSecurityAlerts(entry);\n }\n\n private determineAuditTrail(entry: AuditEntry): string {\n // Use category and date for trail determination\n const date = entry.timestamp.toISOString().split('T')[0];\n return `${entry.category}-${date}`;\n }\n\n private async createAuditTrail(id: string, category: string): Promise<AuditTrail> {\n const trail: AuditTrail = {\n id,\n name: `${category} audit trail`,\n description: `Audit trail for ${category} events`,\n category,\n entries: [],\n configuration: {\n retention:\n this.configuration.compliance.retentionPolicies[category] ||\n this.configuration.general.defaultRetention,\n compression: this.configuration.general.compressionEnabled,\n encryption: this.configuration.general.encryptionEnabled,\n archival: {\n enabled: true,\n location: join(this.auditPath, 'archive'),\n schedule: 'yearly',\n },\n monitoring: {\n realTime: this.configuration.general.realTimeProcessing,\n alerting: this.configuration.monitoring.alerting.enabled,\n dashboards: [],\n },\n },\n integrity: {\n verified: true,\n lastVerification: new Date(),\n checksum: '',\n tamperEvidence: [],\n },\n access: {\n viewers: [],\n admins: ['audit-admin'],\n readonly: false,\n auditAccess: true,\n },\n compliance: {\n frameworks: [],\n retention:\n this.configuration.compliance.retentionPolicies[category] ||\n this.configuration.general.defaultRetention,\n exportRequirements: [],\n immutable: this.configuration.integrity.immutableStorage,\n },\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n\n this.auditTrails.set(trail.id, trail);\n await this.saveAuditTrail(trail);\n\n return trail;\n }\n\n private calculateHash(entry: AuditEntry): string {\n // Create a deterministic string representation of the entry\n const data = {\n timestamp: entry.timestamp.toISOString(),\n eventType: entry.eventType,\n category: entry.category,\n userId: entry.userId,\n resource: entry.resource,\n action: entry.action,\n outcome: entry.outcome,\n details: entry.details,\n };\n\n return createHash(this.configuration.integrity.checksumAlgorithm)\n .update(JSON.stringify(data))\n .digest('hex');\n }\n\n private calculateTrailChecksum(trail: AuditTrail): string {\n const data = trail.entries.map((e) => e.integrity.hash).join('');\n return createHash(this.configuration.integrity.checksumAlgorithm).update(data).digest('hex');\n }\n\n private calculateRetentionPeriod(category: string, frameworks?: string[]): string {\n const categoryRetention = this.configuration.compliance.retentionPolicies[category];\n if (categoryRetention) return categoryRetention;\n\n // Check framework requirements\n if (frameworks) {\n let maxRetention = this.configuration.general.defaultRetention;\n for (const frameworkId of frameworks) {\n const framework = this.frameworks.get(frameworkId);\n if (\n framework &&\n this.parseRetentionPeriod(framework.retentionPeriod) >\n this.parseRetentionPeriod(maxRetention)\n ) {\n maxRetention = framework.retentionPeriod;\n }\n }\n return maxRetention;\n }\n\n return this.configuration.general.defaultRetention;\n }\n\n private parseRetentionPeriod(period: string): number {\n const match = period.match(/(\\d+)([ymd])/);\n if (!match) return 0;\n\n const value = parseInt(match[1]);\n const unit = match[2];\n\n switch (unit) {\n case 'y':\n return value * 365;\n case 'm':\n return value * 30;\n case 'd':\n return value;\n default:\n return 0;\n }\n }\n\n private async queryAuditEntries(scope: {\n timeRange?: { start: Date; end: Date };\n categories?: string[];\n severity?: string[];\n users?: string[];\n events?: string[];\n compliance?: string[];\n }): Promise<AuditEntry[]> {\n let entries: AuditEntry[] = [];\n\n // Collect entries from all trails\n for (const trail of this.auditTrails.values()) {\n entries.push(...trail.entries);\n }\n\n // Apply filters\n if (scope.timeRange) {\n entries = entries.filter(\n (e) => e.timestamp >= scope.timeRange!.start && e.timestamp <= scope.timeRange!.end,\n );\n }\n\n if (scope.categories) {\n entries = entries.filter((e) => scope.categories!.includes(e.category));\n }\n\n if (scope.severity) {\n entries = entries.filter((e) => scope.severity!.includes(e.severity));\n }\n\n if (scope.users) {\n entries = entries.filter((e) => e.userId && scope.users!.includes(e.userId));\n }\n\n if (scope.events) {\n entries = entries.filter((e) => scope.events!.includes(e.eventType));\n }\n\n if (scope.compliance) {\n entries = entries.filter((e) =>\n e.compliance.frameworks.some((f) => scope.compliance!.includes(f)),\n );\n }\n\n return entries.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());\n }\n\n private async analyzeAuditEntries(\n entries: AuditEntry[],\n reportType: string,\n ): Promise<AuditFinding[]> {\n const findings: AuditFinding[] = [];\n\n // Security-focused analysis\n if (reportType === 'security') {\n // Check for failed login patterns\n const failedLogins = entries.filter(\n (e) => e.eventType === 'user_login' && e.outcome === 'failure',\n );\n\n if (failedLogins.length > 10) {\n findings.push({\n id: `finding-${Date.now()}-1`,\n title: 'Excessive Failed Login Attempts',\n description: `${failedLogins.length} failed login attempts detected`,\n severity: 'high',\n category: 'authentication',\n risk: 'Potential brute force attack',\n impact: 'Unauthorized access attempt',\n likelihood: 'medium',\n evidence: [],\n relatedEvents: failedLogins.map((e) => e.id),\n complianceImpact: {\n frameworks: ['SOC2'],\n violations: ['Access Control'],\n penalties: [],\n },\n remediation: {\n priority: 'high',\n owner: 'security-team',\n actions: ['Implement account lockout', 'Enable MFA', 'Review access logs'],\n timeline: '7 days',\n },\n status: 'open',\n });\n }\n }\n\n // Compliance-focused analysis\n if (reportType === 'compliance') {\n // Check for data access patterns\n const dataAccess = entries.filter(\n (e) => e.category === 'data-access' && e.details.pii === true,\n );\n\n if (dataAccess.length > 0) {\n findings.push({\n id: `finding-${Date.now()}-2`,\n title: 'PII Data Access Events',\n description: `${dataAccess.length} events involving PII data access`,\n severity: 'medium',\n category: 'data-protection',\n risk: 'Privacy compliance risk',\n impact: 'Potential GDPR violation',\n likelihood: 'low',\n evidence: [],\n relatedEvents: dataAccess.map((e) => e.id),\n complianceImpact: {\n frameworks: ['GDPR'],\n violations: ['Data Processing'],\n penalties: ['Administrative fine'],\n },\n remediation: {\n priority: 'medium',\n owner: 'data-protection-officer',\n actions: ['Review data access justification', 'Update privacy notices'],\n timeline: '30 days',\n },\n status: 'open',\n });\n }\n }\n\n return findings;\n }\n\n private async calculateComplianceScore(\n frameworks: string[],\n entries: AuditEntry[],\n ): Promise<number> {\n let totalRequirements = 0;\n let metRequirements = 0;\n\n for (const frameworkId of frameworks) {\n const framework = this.frameworks.get(frameworkId);\n if (!framework) continue;\n\n for (const requirement of framework.requirements) {\n totalRequirements++;\n\n if (requirement.status === 'compliant') {\n metRequirements++;\n } else if (requirement.automatedCheck.enabled) {\n // Check if automated requirement is met based on audit data\n const violations = this.checkAutomatedRequirement(requirement, entries);\n if (violations.length === 0) {\n metRequirements++;\n }\n }\n }\n }\n\n return totalRequirements > 0 ? (metRequirements / totalRequirements) * 100 : 0;\n }\n\n private checkAutomatedRequirement(\n requirement: ComplianceRequirement,\n entries: AuditEntry[],\n ): AuditEntry[] {\n // Simplified automated compliance checking\n // In a real implementation, this would parse the query and evaluate against entries\n const violations = entries.filter((e) => {\n if (requirement.automatedCheck.query.includes('outcome:failure')) {\n return e.outcome === 'failure';\n }\n return false;\n });\n\n return violations;\n }\n\n private calculateRiskLevel(findings: AuditFinding[]): 'low' | 'medium' | 'high' | 'critical' {\n const criticalFindings = findings.filter((f) => f.severity === 'critical').length;\n const highFindings = findings.filter((f) => f.severity === 'high').length;\n\n if (criticalFindings > 0) return 'critical';\n if (highFindings > 2) return 'high';\n if (findings.length > 5) return 'medium';\n return 'low';\n }\n\n private async generateRecommendations(\n findings: AuditFinding[],\n reportType: string,\n ): Promise<AuditRecommendation[]> {\n const recommendations: AuditRecommendation[] = [];\n\n // Generic security recommendations\n if (findings.some((f) => f.category === 'authentication')) {\n recommendations.push({\n id: `rec-${Date.now()}-1`,\n title: 'Strengthen Authentication Controls',\n description: 'Implement additional authentication security measures',\n priority: 'high',\n category: 'technology',\n implementation: {\n effort: 'medium',\n cost: 'medium',\n timeline: '30 days',\n dependencies: ['Identity Provider Integration'],\n risks: ['User experience impact'],\n },\n expectedBenefit: 'Reduced risk of unauthorized access',\n owner: 'security-team',\n status: 'proposed',\n tracking: {\n milestones: ['MFA deployment', 'Policy update', 'User training'],\n progress: 0,\n nextReview: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000),\n },\n });\n }\n\n return recommendations;\n }\n\n private async checkComplianceViolations(entry: AuditEntry): Promise<void> {\n for (const frameworkId of entry.compliance.frameworks) {\n const framework = this.frameworks.get(frameworkId);\n if (!framework) continue;\n\n for (const requirement of framework.requirements) {\n if (requirement.automatedCheck.enabled) {\n const violations = this.checkAutomatedRequirement(requirement, [entry]);\n if (violations.length > 0) {\n this.emit('compliance:violation', {\n framework: frameworkId,\n requirement: requirement.id,\n entry,\n severity: requirement.priority,\n });\n }\n }\n }\n }\n }\n\n private async checkSecurityAlerts(entry: AuditEntry): Promise<void> {\n const thresholds = this.configuration.monitoring.alerting.thresholds;\n\n // Check for specific alert conditions\n if (entry.eventType === 'user_login' && entry.outcome === 'failure') {\n // Would implement failed login threshold checking\n }\n\n if (entry.category === 'data-access' && entry.details.privileged) {\n this.emit('security:alert', {\n type: 'privileged-access',\n entry,\n severity: 'medium',\n });\n }\n }\n\n private async generateSecurityAlert(entry: AuditEntry): Promise<void> {\n this.emit('security:critical', {\n entry,\n message: `Critical security event: ${entry.eventType}`,\n action: 'immediate-review-required',\n });\n }\n\n private calculatePeakHourly(entries: AuditEntry[]): number {\n const hourlyBuckets: Record<string, number> = {};\n\n for (const entry of entries) {\n const hour = entry.timestamp.toISOString().substr(0, 13); // YYYY-MM-DDTHH\n hourlyBuckets[hour] = (hourlyBuckets[hour] || 0) + 1;\n }\n\n return Math.max(...Object.values(hourlyBuckets), 0);\n }\n\n private groupBy<T>(array: T[], key: keyof T): Record<string, number> {\n return array.reduce(\n (groups, item) => {\n const value = String(item[key]);\n groups[value] = (groups[value] || 0) + 1;\n return groups;\n },\n {} as Record<string, number>,\n );\n }\n\n private convertToCSV(entries: AuditEntry[]): string {\n const headers = [\n 'timestamp',\n 'eventType',\n 'category',\n 'severity',\n 'userId',\n 'action',\n 'outcome',\n 'resource',\n ];\n const rows = entries.map((entry) => [\n entry.timestamp.toISOString(),\n entry.eventType,\n entry.category,\n entry.severity,\n entry.userId || '',\n entry.action,\n entry.outcome,\n `${entry.resource.type}:${entry.resource.id}`,\n ]);\n\n return [headers, ...rows].map((row) => row.join(',')).join('\\n');\n }\n\n private convertToXML(entries: AuditEntry[]): string {\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<auditEntries>\\n';\n\n for (const entry of entries) {\n xml += ` <entry id=\"${entry.id}\">\\n`;\n xml += ` <timestamp>${entry.timestamp.toISOString()}</timestamp>\\n`;\n xml += ` <eventType>${entry.eventType}</eventType>\\n`;\n xml += ` <category>${entry.category}</category>\\n`;\n xml += ` <severity>${entry.severity}</severity>\\n`;\n xml += ` <action>${entry.action}</action>\\n`;\n xml += ` <outcome>${entry.outcome}</outcome>\\n`;\n xml += ` </entry>\\n`;\n }\n\n xml += '</auditEntries>';\n return xml;\n }\n\n private async convertToPDF(entries: AuditEntry[]): Promise<string> {\n // Would implement PDF generation\n return 'PDF generation not implemented';\n }\n\n private async saveFramework(framework: ComplianceFramework): Promise<void> {\n const filePath = join(this.auditPath, 'frameworks', `${framework.id}.json`);\n await writeFile(filePath, JSON.stringify(framework, null, 2));\n }\n\n private async saveAuditTrail(trail: AuditTrail): Promise<void> {\n const filePath = join(this.auditPath, 'trails', `${trail.id}.json`);\n await writeFile(filePath, JSON.stringify(trail, null, 2));\n }\n\n private async saveReport(report: AuditReport): Promise<void> {\n const filePath = join(this.auditPath, 'reports', `${report.id}.json`);\n await writeFile(filePath, JSON.stringify(report, null, 2));\n }\n}\n"],"names":["EventEmitter","writeFile","readFile","mkdir","readdir","join","createHash","Logger","ConfigManager","AuditManager","auditTrails","Map","frameworks","reports","auditBuffer","auditPath","logger","config","configuration","level","format","destination","getInstance","getDefaultConfiguration","initialize","recursive","loadConfigurations","initializeDefaultFrameworks","startAuditProcessing","info","error","logAuditEvent","eventData","entry","id","Date","now","Math","random","toString","substr","timestamp","eventType","category","severity","userId","sessionId","resource","action","outcome","details","context","source","compliance","controls","retention","calculateRetentionPeriod","classification","integrity","hash","verified","metadata","calculateHash","push","processAuditEntry","generateSecurityAlert","length","collection","batchSize","flushAuditBuffer","emit","createComplianceFramework","frameworkData","framework","name","version","description","type","requirements","map","req","index","automatedCheck","enabled","frequency","query","auditFrequency","retentionPeriod","reportingRequirements","recipients","automated","control","status","implementationDate","nextReview","responsible","set","saveFramework","frameworkType","requirementsCount","generateAuditReport","reportConfig","report","title","scope","findings","recommendations","summary","totalEvents","criticalFindings","complianceScore","riskLevel","methodology","limitations","reviewers","approvers","confidentiality","createdAt","updatedAt","createdBy","auditEntries","queryAuditEntries","analyzeAuditEntries","filter","f","calculateComplianceScore","calculateRiskLevel","includeRecommendations","generateRecommendations","saveReport","reportType","findingsCount","exportAuditData","exportConfig","entries","exportData","toISOString","replace","filename","filepath","JSON","stringify","convertToCSV","convertToXML","convertToPDF","Error","compression","encryption","path","recordCount","timeRange","compressed","encrypted","verifyAuditIntegrity","trailId","issues","totalEntries","verifiedEntries","corruptedEntries","missingEntries","trails","get","Boolean","Array","from","values","trail","calculatedHash","investigationStatus","evidence","lastVerification","tamperEvidence","saveAuditTrail","issuesFound","getAuditMetrics","range","start","end","volumeMetrics","dailyAverage","peakHourly","calculatePeakHourly","byCategory","groupBy","bySeverity","complianceMetrics","overallScore","byFramework","trending","score","compliant","r","nonCompliant","total","integrityMetrics","verificationSuccess","tamperAttempts","e","dataLoss","corruptionEvents","performanceMetrics","ingestionRate","queryResponseTime","storageEfficiency","availabilityPercentage","securityMetrics","unauthorizedAccess","privilegedActions","privileged","suspiciousPatterns","escalatedIncidents","volume","performance","security","general","defaultRetention","compressionEnabled","encryptionEnabled","realTimeProcessing","automaticCapture","bufferSize","flushInterval","failureHandling","storage","primaryLocation","partitioning","indexing","checksumAlgorithm","verificationFrequency","digitalSignatures","immutableStorage","automaticClassification","retentionPolicies","authentication","exportFormats","monitoring","alerting","channels","thresholds","failedLogins","privilegedAccess","dataExfiltration","configChanges","reporting","dashboards","privacy","piiDetection","anonymization","masking","patterns","consent","required","tracking","frameworkFiles","file","endsWith","content","parse","trailFiles","reportFiles","size","warn","defaultFrameworks","priority","gaps","remediation","actions","owner","dueDate","lastAssessed","nextAssessment","threshold","automationType","effectiveness","testingProcedure","lastTested","nextTest","some","setInterval","debug","unshift","determineAuditTrail","createAuditTrail","checksum","calculateTrailChecksum","checkComplianceViolations","checkSecurityAlerts","date","split","archival","location","schedule","realTime","access","viewers","admins","readonly","auditAccess","exportRequirements","immutable","data","update","digest","categoryRetention","maxRetention","frameworkId","parseRetentionPeriod","period","match","value","parseInt","unit","categories","includes","users","events","sort","a","b","getTime","risk","impact","likelihood","relatedEvents","complianceImpact","violations","penalties","timeline","dataAccess","pii","totalRequirements","metRequirements","requirement","checkAutomatedRequirement","highFindings","implementation","effort","cost","dependencies","risks","expectedBenefit","milestones","progress","message","hourlyBuckets","hour","max","Object","array","key","reduce","groups","item","String","headers","rows","row","xml","filePath"],"mappings":"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"}
@@ -190,8 +190,8 @@ export class OpenAIProvider extends BaseProvider {
190
190
  const reader = response.body.getReader();
191
191
  const decoder = new TextDecoder();
192
192
  let buffer = '';
193
- let totalPromptTokens = 0;
194
- let totalCompletionTokens = 0;
193
+ const totalPromptTokens = 0;
194
+ const totalCompletionTokens = 0;
195
195
  while(true){
196
196
  const { done, value } = await reader.read();
197
197
  if (done) break;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/providers/openai-provider.ts"],"sourcesContent":["/**\n * OpenAI Provider Implementation\n * Supports GPT-4, GPT-3.5, and other OpenAI models\n */\n\nimport { BaseProvider } from './base-provider.js';\nimport {\n LLMProvider,\n LLMModel,\n LLMRequest,\n LLMResponse,\n LLMStreamEvent,\n ModelInfo,\n ProviderCapabilities,\n HealthCheckResult,\n LLMProviderError,\n RateLimitError,\n AuthenticationError,\n ModelNotFoundError,\n} from './types.js';\n\ninterface OpenAIRequest {\n model: string;\n messages: Array<{\n role: 'system' | 'user' | 'assistant' | 'function';\n content: string;\n name?: string;\n function_call?: {\n name: string;\n arguments: string;\n };\n }>;\n temperature?: number;\n max_tokens?: number;\n top_p?: number;\n frequency_penalty?: number;\n presence_penalty?: number;\n stop?: string[];\n stream?: boolean;\n functions?: Array<{\n name: string;\n description: string;\n parameters: any;\n }>;\n function_call?: 'auto' | 'none' | { name: string };\n}\n\ninterface OpenAIResponse {\n id: string;\n object: string;\n created: number;\n model: string;\n choices: Array<{\n index: number;\n message: {\n role: string;\n content: string | null;\n function_call?: {\n name: string;\n arguments: string;\n };\n };\n finish_reason: 'stop' | 'length' | 'function_call' | 'content_filter';\n }>;\n usage: {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n };\n}\n\ninterface OpenAIStreamChunk {\n id: string;\n object: string;\n created: number;\n model: string;\n choices: Array<{\n index: number;\n delta: {\n role?: string;\n content?: string;\n function_call?: {\n name?: string;\n arguments?: string;\n };\n };\n finish_reason?: string;\n }>;\n}\n\nexport class OpenAIProvider extends BaseProvider {\n readonly name: LLMProvider = 'openai';\n readonly capabilities: ProviderCapabilities = {\n supportedModels: [\n 'gpt-4-turbo-preview',\n 'gpt-4',\n 'gpt-4-32k',\n 'gpt-3.5-turbo',\n 'gpt-3.5-turbo-16k',\n ],\n maxContextLength: {\n 'gpt-4-turbo-preview': 128000,\n 'gpt-4': 8192,\n 'gpt-4-32k': 32768,\n 'gpt-3.5-turbo': 4096,\n 'gpt-3.5-turbo-16k': 16384,\n } as Record<LLMModel, number>,\n maxOutputTokens: {\n 'gpt-4-turbo-preview': 4096,\n 'gpt-4': 4096,\n 'gpt-4-32k': 4096,\n 'gpt-3.5-turbo': 4096,\n 'gpt-3.5-turbo-16k': 4096,\n } as Record<LLMModel, number>,\n supportsStreaming: true,\n supportsFunctionCalling: true,\n supportsSystemMessages: true,\n supportsVision: true, // GPT-4 with vision\n supportsAudio: false,\n supportsTools: true,\n supportsFineTuning: true,\n supportsEmbeddings: true,\n supportsLogprobs: true,\n supportsBatching: true,\n rateLimit: {\n requestsPerMinute: 3500,\n tokensPerMinute: 90000,\n concurrentRequests: 100,\n },\n pricing: {\n 'gpt-4-turbo-preview': {\n promptCostPer1k: 0.01,\n completionCostPer1k: 0.03,\n currency: 'USD',\n },\n 'gpt-4': {\n promptCostPer1k: 0.03,\n completionCostPer1k: 0.06,\n currency: 'USD',\n },\n 'gpt-4-32k': {\n promptCostPer1k: 0.06,\n completionCostPer1k: 0.12,\n currency: 'USD',\n },\n 'gpt-3.5-turbo': {\n promptCostPer1k: 0.0005,\n completionCostPer1k: 0.0015,\n currency: 'USD',\n },\n 'gpt-3.5-turbo-16k': {\n promptCostPer1k: 0.003,\n completionCostPer1k: 0.004,\n currency: 'USD',\n },\n },\n };\n\n private baseUrl: string;\n private headers: Record<string, string>;\n\n protected async doInitialize(): Promise<void> {\n if (!this.config.apiKey) {\n throw new AuthenticationError('OpenAI API key is required', 'openai');\n }\n\n this.baseUrl = this.config.apiUrl || 'https://api.openai.com/v1';\n this.headers = {\n 'Authorization': `Bearer ${this.config.apiKey}`,\n 'Content-Type': 'application/json',\n };\n\n // Add organization header if provided\n if (this.config.providerOptions?.organization) {\n this.headers['OpenAI-Organization'] = this.config.providerOptions.organization;\n }\n }\n\n protected async doComplete(request: LLMRequest): Promise<LLMResponse> {\n const openAIRequest: OpenAIRequest = {\n model: this.mapToOpenAIModel(request.model || this.config.model),\n messages: request.messages.map((msg) => ({\n role: msg.role,\n content: msg.content,\n ...(msg.name && { name: msg.name }),\n ...(msg.functionCall && { function_call: msg.functionCall }),\n })),\n temperature: request.temperature ?? this.config.temperature,\n max_tokens: request.maxTokens ?? this.config.maxTokens,\n top_p: request.topP ?? this.config.topP,\n frequency_penalty: request.frequencyPenalty ?? this.config.frequencyPenalty,\n presence_penalty: request.presencePenalty ?? this.config.presencePenalty,\n stop: request.stopSequences ?? this.config.stopSequences,\n stream: false,\n };\n\n // Add function calling if present\n if (request.functions) {\n openAIRequest.functions = request.functions;\n openAIRequest.function_call = request.functionCall;\n }\n\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), this.config.timeout || 60000);\n\n try {\n const response = await fetch(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(openAIRequest),\n signal: controller.signal,\n });\n\n clearTimeout(timeout);\n\n if (!response.ok) {\n await this.handleErrorResponse(response);\n }\n\n const data: OpenAIResponse = await response.json();\n const choice = data.choices[0];\n\n // Calculate cost\n const model = request.model || this.config.model;\n const pricing = this.capabilities.pricing![model];\n const promptCost = (data.usage.prompt_tokens / 1000) * pricing.promptCostPer1k;\n const completionCost = (data.usage.completion_tokens / 1000) * pricing.completionCostPer1k;\n\n return {\n id: data.id,\n model: this.mapFromOpenAIModel(data.model),\n provider: 'openai',\n content: choice.message.content || '',\n functionCall: choice.message.function_call,\n usage: {\n promptTokens: data.usage.prompt_tokens,\n completionTokens: data.usage.completion_tokens,\n totalTokens: data.usage.total_tokens,\n },\n cost: {\n promptCost,\n completionCost,\n totalCost: promptCost + completionCost,\n currency: 'USD',\n },\n finishReason: choice.finish_reason,\n };\n } catch (error) {\n clearTimeout(timeout);\n throw this.transformError(error);\n }\n }\n\n protected async *doStreamComplete(request: LLMRequest): AsyncIterable<LLMStreamEvent> {\n const openAIRequest: OpenAIRequest = {\n model: this.mapToOpenAIModel(request.model || this.config.model),\n messages: request.messages.map((msg) => ({\n role: msg.role,\n content: msg.content,\n ...(msg.name && { name: msg.name }),\n ...(msg.functionCall && { function_call: msg.functionCall }),\n })),\n temperature: request.temperature ?? this.config.temperature,\n max_tokens: request.maxTokens ?? this.config.maxTokens,\n top_p: request.topP ?? this.config.topP,\n frequency_penalty: request.frequencyPenalty ?? this.config.frequencyPenalty,\n presence_penalty: request.presencePenalty ?? this.config.presencePenalty,\n stop: request.stopSequences ?? this.config.stopSequences,\n stream: true,\n };\n\n if (request.functions) {\n openAIRequest.functions = request.functions;\n openAIRequest.function_call = request.functionCall;\n }\n\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), (this.config.timeout || 60000) * 2);\n\n try {\n const response = await fetch(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(openAIRequest),\n signal: controller.signal,\n });\n\n if (!response.ok) {\n await this.handleErrorResponse(response);\n }\n\n const reader = response.body!.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n let totalPromptTokens = 0;\n let totalCompletionTokens = 0;\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n const data = line.slice(6);\n if (data === '[DONE]') continue;\n\n try {\n const chunk: OpenAIStreamChunk = JSON.parse(data);\n const delta = chunk.choices[0].delta;\n\n if (delta.content) {\n yield {\n type: 'content',\n delta: { content: delta.content },\n };\n }\n\n if (delta.function_call) {\n yield {\n type: 'function_call',\n delta: { functionCall: delta.function_call },\n };\n }\n\n if (chunk.choices[0].finish_reason) {\n // Estimate tokens for streaming\n const promptTokens = this.estimateTokens(JSON.stringify(request.messages));\n const completionTokens = Math.max(totalCompletionTokens, 100); // Minimum estimate\n\n const model = request.model || this.config.model;\n const pricing = this.capabilities.pricing![model];\n const promptCost = (promptTokens / 1000) * pricing.promptCostPer1k;\n const completionCost = (completionTokens / 1000) * pricing.completionCostPer1k;\n\n yield {\n type: 'done',\n usage: {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n },\n cost: {\n promptCost,\n completionCost,\n totalCost: promptCost + completionCost,\n currency: 'USD',\n },\n };\n }\n } catch (e) {\n this.logger.warn('Failed to parse OpenAI stream chunk', { data, error: e });\n }\n }\n }\n }\n } catch (error) {\n clearTimeout(timeout);\n throw this.transformError(error);\n } finally {\n clearTimeout(timeout);\n }\n }\n\n async listModels(): Promise<LLMModel[]> {\n return this.capabilities.supportedModels;\n }\n\n async getModelInfo(model: LLMModel): Promise<ModelInfo> {\n return {\n model,\n name: model,\n description: this.getModelDescription(model),\n contextLength: this.capabilities.maxContextLength[model] || 4096,\n maxOutputTokens: this.capabilities.maxOutputTokens[model] || 4096,\n supportedFeatures: [\n 'chat',\n 'completion',\n 'function_calling',\n ...(model.includes('gpt-4') ? ['vision'] : []),\n ],\n pricing: this.capabilities.pricing![model],\n };\n }\n\n protected async doHealthCheck(): Promise<HealthCheckResult> {\n try {\n const response = await fetch(`${this.baseUrl}/models`, {\n headers: this.headers,\n });\n\n if (!response.ok) {\n throw new Error(`Health check failed: ${response.status}`);\n }\n\n return {\n healthy: true,\n timestamp: new Date(),\n };\n } catch (error) {\n return {\n healthy: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n timestamp: new Date(),\n };\n }\n }\n\n private mapToOpenAIModel(model: LLMModel): string {\n // Map our model names to OpenAI model names if needed\n const modelMap: Record<string, string> = {\n 'gpt-4-turbo-preview': 'gpt-4-turbo-preview',\n 'gpt-4': 'gpt-4',\n 'gpt-4-32k': 'gpt-4-32k',\n 'gpt-3.5-turbo': 'gpt-3.5-turbo',\n 'gpt-3.5-turbo-16k': 'gpt-3.5-turbo-16k',\n };\n return modelMap[model] || model;\n }\n\n private mapFromOpenAIModel(model: string): LLMModel {\n // Ensure the model is in our supported list\n return this.capabilities.supportedModels.find((m) => m === model) || 'gpt-3.5-turbo';\n }\n\n private getModelDescription(model: LLMModel): string {\n const descriptions: Record<string, string> = {\n 'gpt-4-turbo-preview': 'Latest GPT-4 Turbo model with improved performance',\n 'gpt-4': 'Most capable GPT-4 model for complex tasks',\n 'gpt-4-32k': 'GPT-4 with extended 32k context window',\n 'gpt-3.5-turbo': 'Fast and efficient model for most tasks',\n 'gpt-3.5-turbo-16k': 'GPT-3.5 Turbo with extended context',\n };\n return descriptions[model] || 'OpenAI language model';\n }\n\n private async handleErrorResponse(response: Response): Promise<void> {\n const errorText = await response.text();\n let errorData: any;\n\n try {\n errorData = JSON.parse(errorText);\n } catch {\n errorData = { error: { message: errorText } };\n }\n\n const message = errorData.error?.message || 'Unknown error';\n\n switch (response.status) {\n case 401:\n throw new AuthenticationError(message, 'openai', errorData);\n case 429:\n const retryAfter = response.headers.get('retry-after');\n throw new RateLimitError(\n message,\n 'openai',\n retryAfter ? parseInt(retryAfter) : undefined,\n errorData\n );\n case 404:\n throw new ModelNotFoundError(this.config.model, 'openai', errorData);\n default:\n throw new LLMProviderError(\n message,\n `OPENAI_${response.status}`,\n 'openai',\n response.status,\n response.status >= 500,\n errorData\n );\n }\n }\n}"],"names":["BaseProvider","LLMProviderError","RateLimitError","AuthenticationError","ModelNotFoundError","OpenAIProvider","name","capabilities","supportedModels","maxContextLength","maxOutputTokens","supportsStreaming","supportsFunctionCalling","supportsSystemMessages","supportsVision","supportsAudio","supportsTools","supportsFineTuning","supportsEmbeddings","supportsLogprobs","supportsBatching","rateLimit","requestsPerMinute","tokensPerMinute","concurrentRequests","pricing","promptCostPer1k","completionCostPer1k","currency","baseUrl","headers","doInitialize","config","apiKey","apiUrl","providerOptions","organization","doComplete","request","openAIRequest","model","mapToOpenAIModel","messages","map","msg","role","content","functionCall","function_call","temperature","max_tokens","maxTokens","top_p","topP","frequency_penalty","frequencyPenalty","presence_penalty","presencePenalty","stop","stopSequences","stream","functions","controller","AbortController","timeout","setTimeout","abort","response","fetch","method","body","JSON","stringify","signal","clearTimeout","ok","handleErrorResponse","data","json","choice","choices","promptCost","usage","prompt_tokens","completionCost","completion_tokens","id","mapFromOpenAIModel","provider","message","promptTokens","completionTokens","totalTokens","total_tokens","cost","totalCost","finishReason","finish_reason","error","transformError","doStreamComplete","reader","getReader","decoder","TextDecoder","buffer","totalPromptTokens","totalCompletionTokens","done","value","read","decode","lines","split","pop","line","startsWith","slice","chunk","parse","delta","type","estimateTokens","Math","max","e","logger","warn","listModels","getModelInfo","description","getModelDescription","contextLength","supportedFeatures","includes","doHealthCheck","Error","status","healthy","timestamp","Date","modelMap","find","m","descriptions","errorText","text","errorData","retryAfter","get","parseInt","undefined"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/providers/openai-provider.ts"],"sourcesContent":["/**\n * OpenAI Provider Implementation\n * Supports GPT-4, GPT-3.5, and other OpenAI models\n */\n\nimport { BaseProvider } from './base-provider.js';\nimport {\n LLMProvider,\n LLMModel,\n LLMRequest,\n LLMResponse,\n LLMStreamEvent,\n ModelInfo,\n ProviderCapabilities,\n HealthCheckResult,\n LLMProviderError,\n RateLimitError,\n AuthenticationError,\n ModelNotFoundError,\n} from './types.js';\n\ninterface OpenAIRequest {\n model: string;\n messages: Array<{\n role: 'system' | 'user' | 'assistant' | 'function';\n content: string;\n name?: string;\n function_call?: {\n name: string;\n arguments: string;\n };\n }>;\n temperature?: number;\n max_tokens?: number;\n top_p?: number;\n frequency_penalty?: number;\n presence_penalty?: number;\n stop?: string[];\n stream?: boolean;\n functions?: Array<{\n name: string;\n description: string;\n parameters: any;\n }>;\n function_call?: 'auto' | 'none' | { name: string };\n}\n\ninterface OpenAIResponse {\n id: string;\n object: string;\n created: number;\n model: string;\n choices: Array<{\n index: number;\n message: {\n role: string;\n content: string | null;\n function_call?: {\n name: string;\n arguments: string;\n };\n };\n finish_reason: 'stop' | 'length' | 'function_call' | 'content_filter';\n }>;\n usage: {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n };\n}\n\ninterface OpenAIStreamChunk {\n id: string;\n object: string;\n created: number;\n model: string;\n choices: Array<{\n index: number;\n delta: {\n role?: string;\n content?: string;\n function_call?: {\n name?: string;\n arguments?: string;\n };\n };\n finish_reason?: string;\n }>;\n}\n\nexport class OpenAIProvider extends BaseProvider {\n readonly name: LLMProvider = 'openai';\n readonly capabilities: ProviderCapabilities = {\n supportedModels: [\n 'gpt-4-turbo-preview',\n 'gpt-4',\n 'gpt-4-32k',\n 'gpt-3.5-turbo',\n 'gpt-3.5-turbo-16k',\n ],\n maxContextLength: {\n 'gpt-4-turbo-preview': 128000,\n 'gpt-4': 8192,\n 'gpt-4-32k': 32768,\n 'gpt-3.5-turbo': 4096,\n 'gpt-3.5-turbo-16k': 16384,\n } as Record<LLMModel, number>,\n maxOutputTokens: {\n 'gpt-4-turbo-preview': 4096,\n 'gpt-4': 4096,\n 'gpt-4-32k': 4096,\n 'gpt-3.5-turbo': 4096,\n 'gpt-3.5-turbo-16k': 4096,\n } as Record<LLMModel, number>,\n supportsStreaming: true,\n supportsFunctionCalling: true,\n supportsSystemMessages: true,\n supportsVision: true, // GPT-4 with vision\n supportsAudio: false,\n supportsTools: true,\n supportsFineTuning: true,\n supportsEmbeddings: true,\n supportsLogprobs: true,\n supportsBatching: true,\n rateLimit: {\n requestsPerMinute: 3500,\n tokensPerMinute: 90000,\n concurrentRequests: 100,\n },\n pricing: {\n 'gpt-4-turbo-preview': {\n promptCostPer1k: 0.01,\n completionCostPer1k: 0.03,\n currency: 'USD',\n },\n 'gpt-4': {\n promptCostPer1k: 0.03,\n completionCostPer1k: 0.06,\n currency: 'USD',\n },\n 'gpt-4-32k': {\n promptCostPer1k: 0.06,\n completionCostPer1k: 0.12,\n currency: 'USD',\n },\n 'gpt-3.5-turbo': {\n promptCostPer1k: 0.0005,\n completionCostPer1k: 0.0015,\n currency: 'USD',\n },\n 'gpt-3.5-turbo-16k': {\n promptCostPer1k: 0.003,\n completionCostPer1k: 0.004,\n currency: 'USD',\n },\n },\n };\n\n private baseUrl: string;\n private headers: Record<string, string>;\n\n protected async doInitialize(): Promise<void> {\n if (!this.config.apiKey) {\n throw new AuthenticationError('OpenAI API key is required', 'openai');\n }\n\n this.baseUrl = this.config.apiUrl || 'https://api.openai.com/v1';\n this.headers = {\n 'Authorization': `Bearer ${this.config.apiKey}`,\n 'Content-Type': 'application/json',\n };\n\n // Add organization header if provided\n if (this.config.providerOptions?.organization) {\n this.headers['OpenAI-Organization'] = this.config.providerOptions.organization;\n }\n }\n\n protected async doComplete(request: LLMRequest): Promise<LLMResponse> {\n const openAIRequest: OpenAIRequest = {\n model: this.mapToOpenAIModel(request.model || this.config.model),\n messages: request.messages.map((msg) => ({\n role: msg.role,\n content: msg.content,\n ...(msg.name && { name: msg.name }),\n ...(msg.functionCall && { function_call: msg.functionCall }),\n })),\n temperature: request.temperature ?? this.config.temperature,\n max_tokens: request.maxTokens ?? this.config.maxTokens,\n top_p: request.topP ?? this.config.topP,\n frequency_penalty: request.frequencyPenalty ?? this.config.frequencyPenalty,\n presence_penalty: request.presencePenalty ?? this.config.presencePenalty,\n stop: request.stopSequences ?? this.config.stopSequences,\n stream: false,\n };\n\n // Add function calling if present\n if (request.functions) {\n openAIRequest.functions = request.functions;\n openAIRequest.function_call = request.functionCall;\n }\n\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), this.config.timeout || 60000);\n\n try {\n const response = await fetch(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(openAIRequest),\n signal: controller.signal,\n });\n\n clearTimeout(timeout);\n\n if (!response.ok) {\n await this.handleErrorResponse(response);\n }\n\n const data: OpenAIResponse = await response.json();\n const choice = data.choices[0];\n\n // Calculate cost\n const model = request.model || this.config.model;\n const pricing = this.capabilities.pricing![model];\n const promptCost = (data.usage.prompt_tokens / 1000) * pricing.promptCostPer1k;\n const completionCost = (data.usage.completion_tokens / 1000) * pricing.completionCostPer1k;\n\n return {\n id: data.id,\n model: this.mapFromOpenAIModel(data.model),\n provider: 'openai',\n content: choice.message.content || '',\n functionCall: choice.message.function_call,\n usage: {\n promptTokens: data.usage.prompt_tokens,\n completionTokens: data.usage.completion_tokens,\n totalTokens: data.usage.total_tokens,\n },\n cost: {\n promptCost,\n completionCost,\n totalCost: promptCost + completionCost,\n currency: 'USD',\n },\n finishReason: choice.finish_reason,\n };\n } catch (error) {\n clearTimeout(timeout);\n throw this.transformError(error);\n }\n }\n\n protected async *doStreamComplete(request: LLMRequest): AsyncIterable<LLMStreamEvent> {\n const openAIRequest: OpenAIRequest = {\n model: this.mapToOpenAIModel(request.model || this.config.model),\n messages: request.messages.map((msg) => ({\n role: msg.role,\n content: msg.content,\n ...(msg.name && { name: msg.name }),\n ...(msg.functionCall && { function_call: msg.functionCall }),\n })),\n temperature: request.temperature ?? this.config.temperature,\n max_tokens: request.maxTokens ?? this.config.maxTokens,\n top_p: request.topP ?? this.config.topP,\n frequency_penalty: request.frequencyPenalty ?? this.config.frequencyPenalty,\n presence_penalty: request.presencePenalty ?? this.config.presencePenalty,\n stop: request.stopSequences ?? this.config.stopSequences,\n stream: true,\n };\n\n if (request.functions) {\n openAIRequest.functions = request.functions;\n openAIRequest.function_call = request.functionCall;\n }\n\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), (this.config.timeout || 60000) * 2);\n\n try {\n const response = await fetch(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(openAIRequest),\n signal: controller.signal,\n });\n\n if (!response.ok) {\n await this.handleErrorResponse(response);\n }\n\n const reader = response.body!.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n const totalPromptTokens = 0;\n const totalCompletionTokens = 0;\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n const data = line.slice(6);\n if (data === '[DONE]') continue;\n\n try {\n const chunk: OpenAIStreamChunk = JSON.parse(data);\n const delta = chunk.choices[0].delta;\n\n if (delta.content) {\n yield {\n type: 'content',\n delta: { content: delta.content },\n };\n }\n\n if (delta.function_call) {\n yield {\n type: 'function_call',\n delta: { functionCall: delta.function_call },\n };\n }\n\n if (chunk.choices[0].finish_reason) {\n // Estimate tokens for streaming\n const promptTokens = this.estimateTokens(JSON.stringify(request.messages));\n const completionTokens = Math.max(totalCompletionTokens, 100); // Minimum estimate\n\n const model = request.model || this.config.model;\n const pricing = this.capabilities.pricing![model];\n const promptCost = (promptTokens / 1000) * pricing.promptCostPer1k;\n const completionCost = (completionTokens / 1000) * pricing.completionCostPer1k;\n\n yield {\n type: 'done',\n usage: {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n },\n cost: {\n promptCost,\n completionCost,\n totalCost: promptCost + completionCost,\n currency: 'USD',\n },\n };\n }\n } catch (e) {\n this.logger.warn('Failed to parse OpenAI stream chunk', { data, error: e });\n }\n }\n }\n }\n } catch (error) {\n clearTimeout(timeout);\n throw this.transformError(error);\n } finally {\n clearTimeout(timeout);\n }\n }\n\n async listModels(): Promise<LLMModel[]> {\n return this.capabilities.supportedModels;\n }\n\n async getModelInfo(model: LLMModel): Promise<ModelInfo> {\n return {\n model,\n name: model,\n description: this.getModelDescription(model),\n contextLength: this.capabilities.maxContextLength[model] || 4096,\n maxOutputTokens: this.capabilities.maxOutputTokens[model] || 4096,\n supportedFeatures: [\n 'chat',\n 'completion',\n 'function_calling',\n ...(model.includes('gpt-4') ? ['vision'] : []),\n ],\n pricing: this.capabilities.pricing![model],\n };\n }\n\n protected async doHealthCheck(): Promise<HealthCheckResult> {\n try {\n const response = await fetch(`${this.baseUrl}/models`, {\n headers: this.headers,\n });\n\n if (!response.ok) {\n throw new Error(`Health check failed: ${response.status}`);\n }\n\n return {\n healthy: true,\n timestamp: new Date(),\n };\n } catch (error) {\n return {\n healthy: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n timestamp: new Date(),\n };\n }\n }\n\n private mapToOpenAIModel(model: LLMModel): string {\n // Map our model names to OpenAI model names if needed\n const modelMap: Record<string, string> = {\n 'gpt-4-turbo-preview': 'gpt-4-turbo-preview',\n 'gpt-4': 'gpt-4',\n 'gpt-4-32k': 'gpt-4-32k',\n 'gpt-3.5-turbo': 'gpt-3.5-turbo',\n 'gpt-3.5-turbo-16k': 'gpt-3.5-turbo-16k',\n };\n return modelMap[model] || model;\n }\n\n private mapFromOpenAIModel(model: string): LLMModel {\n // Ensure the model is in our supported list\n return this.capabilities.supportedModels.find((m) => m === model) || 'gpt-3.5-turbo';\n }\n\n private getModelDescription(model: LLMModel): string {\n const descriptions: Record<string, string> = {\n 'gpt-4-turbo-preview': 'Latest GPT-4 Turbo model with improved performance',\n 'gpt-4': 'Most capable GPT-4 model for complex tasks',\n 'gpt-4-32k': 'GPT-4 with extended 32k context window',\n 'gpt-3.5-turbo': 'Fast and efficient model for most tasks',\n 'gpt-3.5-turbo-16k': 'GPT-3.5 Turbo with extended context',\n };\n return descriptions[model] || 'OpenAI language model';\n }\n\n private async handleErrorResponse(response: Response): Promise<void> {\n const errorText = await response.text();\n let errorData: any;\n\n try {\n errorData = JSON.parse(errorText);\n } catch {\n errorData = { error: { message: errorText } };\n }\n\n const message = errorData.error?.message || 'Unknown error';\n\n switch (response.status) {\n case 401:\n throw new AuthenticationError(message, 'openai', errorData);\n case 429:\n const retryAfter = response.headers.get('retry-after');\n throw new RateLimitError(\n message,\n 'openai',\n retryAfter ? parseInt(retryAfter) : undefined,\n errorData\n );\n case 404:\n throw new ModelNotFoundError(this.config.model, 'openai', errorData);\n default:\n throw new LLMProviderError(\n message,\n `OPENAI_${response.status}`,\n 'openai',\n response.status,\n response.status >= 500,\n errorData\n );\n }\n }\n}"],"names":["BaseProvider","LLMProviderError","RateLimitError","AuthenticationError","ModelNotFoundError","OpenAIProvider","name","capabilities","supportedModels","maxContextLength","maxOutputTokens","supportsStreaming","supportsFunctionCalling","supportsSystemMessages","supportsVision","supportsAudio","supportsTools","supportsFineTuning","supportsEmbeddings","supportsLogprobs","supportsBatching","rateLimit","requestsPerMinute","tokensPerMinute","concurrentRequests","pricing","promptCostPer1k","completionCostPer1k","currency","baseUrl","headers","doInitialize","config","apiKey","apiUrl","providerOptions","organization","doComplete","request","openAIRequest","model","mapToOpenAIModel","messages","map","msg","role","content","functionCall","function_call","temperature","max_tokens","maxTokens","top_p","topP","frequency_penalty","frequencyPenalty","presence_penalty","presencePenalty","stop","stopSequences","stream","functions","controller","AbortController","timeout","setTimeout","abort","response","fetch","method","body","JSON","stringify","signal","clearTimeout","ok","handleErrorResponse","data","json","choice","choices","promptCost","usage","prompt_tokens","completionCost","completion_tokens","id","mapFromOpenAIModel","provider","message","promptTokens","completionTokens","totalTokens","total_tokens","cost","totalCost","finishReason","finish_reason","error","transformError","doStreamComplete","reader","getReader","decoder","TextDecoder","buffer","totalPromptTokens","totalCompletionTokens","done","value","read","decode","lines","split","pop","line","startsWith","slice","chunk","parse","delta","type","estimateTokens","Math","max","e","logger","warn","listModels","getModelInfo","description","getModelDescription","contextLength","supportedFeatures","includes","doHealthCheck","Error","status","healthy","timestamp","Date","modelMap","find","m","descriptions","errorText","text","errorData","retryAfter","get","parseInt","undefined"],"mappings":"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"}
@@ -24,7 +24,7 @@ export class RealCheckpointManager extends EventEmitter {
24
24
  } catch (error) {}
25
25
  }
26
26
  async trackSession(sessionId, queryGenerator, autoCheckpoint = false) {
27
- let messages = this.sessionMessages.get(sessionId) || [];
27
+ const messages = this.sessionMessages.get(sessionId) || [];
28
28
  this.sessionMessages.set(sessionId, messages);
29
29
  let messageCount = this.messageCounters.get(sessionId) || 0;
30
30
  for await (const message of queryGenerator){