@pan-sec/notebooklm-mcp 1.4.0 → 1.6.0

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 (123) hide show
  1. package/README.md +61 -7
  2. package/SECURITY.md +40 -6
  3. package/dist/auth/mcp-auth.d.ts.map +1 -1
  4. package/dist/auth/mcp-auth.js +3 -6
  5. package/dist/auth/mcp-auth.js.map +1 -1
  6. package/dist/compliance/alert-manager.d.ts +120 -0
  7. package/dist/compliance/alert-manager.d.ts.map +1 -0
  8. package/dist/compliance/alert-manager.js +420 -0
  9. package/dist/compliance/alert-manager.js.map +1 -0
  10. package/dist/compliance/breach-detection.d.ts +134 -0
  11. package/dist/compliance/breach-detection.d.ts.map +1 -0
  12. package/dist/compliance/breach-detection.js +456 -0
  13. package/dist/compliance/breach-detection.js.map +1 -0
  14. package/dist/compliance/change-log.d.ts +113 -0
  15. package/dist/compliance/change-log.d.ts.map +1 -0
  16. package/dist/compliance/change-log.js +275 -0
  17. package/dist/compliance/change-log.js.map +1 -0
  18. package/dist/compliance/compliance-logger.d.ts +136 -0
  19. package/dist/compliance/compliance-logger.d.ts.map +1 -0
  20. package/dist/compliance/compliance-logger.js +425 -0
  21. package/dist/compliance/compliance-logger.js.map +1 -0
  22. package/dist/compliance/compliance-tools.d.ts +18 -0
  23. package/dist/compliance/compliance-tools.d.ts.map +1 -0
  24. package/dist/compliance/compliance-tools.js +673 -0
  25. package/dist/compliance/compliance-tools.js.map +1 -0
  26. package/dist/compliance/consent-manager.d.ts +130 -0
  27. package/dist/compliance/consent-manager.d.ts.map +1 -0
  28. package/dist/compliance/consent-manager.js +386 -0
  29. package/dist/compliance/consent-manager.js.map +1 -0
  30. package/dist/compliance/dashboard.d.ts +243 -0
  31. package/dist/compliance/dashboard.d.ts.map +1 -0
  32. package/dist/compliance/dashboard.js +519 -0
  33. package/dist/compliance/dashboard.js.map +1 -0
  34. package/dist/compliance/data-classification.d.ts +117 -0
  35. package/dist/compliance/data-classification.d.ts.map +1 -0
  36. package/dist/compliance/data-classification.js +469 -0
  37. package/dist/compliance/data-classification.js.map +1 -0
  38. package/dist/compliance/data-erasure.d.ts +110 -0
  39. package/dist/compliance/data-erasure.d.ts.map +1 -0
  40. package/dist/compliance/data-erasure.js +501 -0
  41. package/dist/compliance/data-erasure.js.map +1 -0
  42. package/dist/compliance/data-export.d.ts +85 -0
  43. package/dist/compliance/data-export.d.ts.map +1 -0
  44. package/dist/compliance/data-export.js +394 -0
  45. package/dist/compliance/data-export.js.map +1 -0
  46. package/dist/compliance/data-inventory.d.ts +136 -0
  47. package/dist/compliance/data-inventory.d.ts.map +1 -0
  48. package/dist/compliance/data-inventory.js +335 -0
  49. package/dist/compliance/data-inventory.js.map +1 -0
  50. package/dist/compliance/dsar-handler.d.ts +123 -0
  51. package/dist/compliance/dsar-handler.d.ts.map +1 -0
  52. package/dist/compliance/dsar-handler.js +371 -0
  53. package/dist/compliance/dsar-handler.js.map +1 -0
  54. package/dist/compliance/evidence-collector.d.ts +187 -0
  55. package/dist/compliance/evidence-collector.d.ts.map +1 -0
  56. package/dist/compliance/evidence-collector.js +656 -0
  57. package/dist/compliance/evidence-collector.js.map +1 -0
  58. package/dist/compliance/health-monitor.d.ts +111 -0
  59. package/dist/compliance/health-monitor.d.ts.map +1 -0
  60. package/dist/compliance/health-monitor.js +509 -0
  61. package/dist/compliance/health-monitor.js.map +1 -0
  62. package/dist/compliance/incident-manager.d.ts +131 -0
  63. package/dist/compliance/incident-manager.d.ts.map +1 -0
  64. package/dist/compliance/incident-manager.js +418 -0
  65. package/dist/compliance/incident-manager.js.map +1 -0
  66. package/dist/compliance/index.d.ts +32 -0
  67. package/dist/compliance/index.d.ts.map +1 -0
  68. package/dist/compliance/index.js +35 -0
  69. package/dist/compliance/index.js.map +1 -0
  70. package/dist/compliance/policy-docs.d.ts +108 -0
  71. package/dist/compliance/policy-docs.d.ts.map +1 -0
  72. package/dist/compliance/policy-docs.js +464 -0
  73. package/dist/compliance/policy-docs.js.map +1 -0
  74. package/dist/compliance/privacy-notice-text.d.ts +58 -0
  75. package/dist/compliance/privacy-notice-text.d.ts.map +1 -0
  76. package/dist/compliance/privacy-notice-text.js +161 -0
  77. package/dist/compliance/privacy-notice-text.js.map +1 -0
  78. package/dist/compliance/privacy-notice.d.ts +128 -0
  79. package/dist/compliance/privacy-notice.d.ts.map +1 -0
  80. package/dist/compliance/privacy-notice.js +250 -0
  81. package/dist/compliance/privacy-notice.js.map +1 -0
  82. package/dist/compliance/report-generator.d.ts +168 -0
  83. package/dist/compliance/report-generator.d.ts.map +1 -0
  84. package/dist/compliance/report-generator.js +830 -0
  85. package/dist/compliance/report-generator.js.map +1 -0
  86. package/dist/compliance/retention-engine.d.ts +130 -0
  87. package/dist/compliance/retention-engine.d.ts.map +1 -0
  88. package/dist/compliance/retention-engine.js +510 -0
  89. package/dist/compliance/retention-engine.js.map +1 -0
  90. package/dist/compliance/siem-exporter.d.ts +150 -0
  91. package/dist/compliance/siem-exporter.d.ts.map +1 -0
  92. package/dist/compliance/siem-exporter.js +509 -0
  93. package/dist/compliance/siem-exporter.js.map +1 -0
  94. package/dist/compliance/types.d.ts +601 -0
  95. package/dist/compliance/types.d.ts.map +1 -0
  96. package/dist/compliance/types.js +22 -0
  97. package/dist/compliance/types.js.map +1 -0
  98. package/dist/config.d.ts +4 -0
  99. package/dist/config.d.ts.map +1 -1
  100. package/dist/config.js +8 -1
  101. package/dist/config.js.map +1 -1
  102. package/dist/library/notebook-library.d.ts.map +1 -1
  103. package/dist/library/notebook-library.js +2 -1
  104. package/dist/library/notebook-library.js.map +1 -1
  105. package/dist/session/shared-context-manager.d.ts.map +1 -1
  106. package/dist/session/shared-context-manager.js +2 -1
  107. package/dist/session/shared-context-manager.js.map +1 -1
  108. package/dist/utils/audit-logger.d.ts +21 -1
  109. package/dist/utils/audit-logger.d.ts.map +1 -1
  110. package/dist/utils/audit-logger.js +53 -4
  111. package/dist/utils/audit-logger.js.map +1 -1
  112. package/dist/utils/crypto.d.ts.map +1 -1
  113. package/dist/utils/crypto.js +8 -15
  114. package/dist/utils/crypto.js.map +1 -1
  115. package/dist/utils/file-permissions.d.ts +85 -0
  116. package/dist/utils/file-permissions.d.ts.map +1 -0
  117. package/dist/utils/file-permissions.js +180 -0
  118. package/dist/utils/file-permissions.js.map +1 -0
  119. package/dist/utils/settings-manager.d.ts.map +1 -1
  120. package/dist/utils/settings-manager.js +6 -11
  121. package/dist/utils/settings-manager.js.map +1 -1
  122. package/docs/COMPLIANCE-SPEC.md +1452 -0
  123. package/package.json +30 -4
@@ -0,0 +1,456 @@
1
+ /**
2
+ * Breach Detection
3
+ *
4
+ * Detects potential security breaches and policy violations.
5
+ * Implements detection rules with configurable thresholds and actions.
6
+ *
7
+ * Added by Pantheon Security for enterprise compliance support.
8
+ */
9
+ import crypto from "crypto";
10
+ import path from "path";
11
+ import fs from "fs";
12
+ import { getConfig } from "../config.js";
13
+ import { mkdirSecure, writeFileSecure } from "../utils/file-permissions.js";
14
+ import { getComplianceLogger } from "./compliance-logger.js";
15
+ import { getAlertManager } from "./alert-manager.js";
16
+ /**
17
+ * Generate a UUID v4
18
+ */
19
+ function generateUUID() {
20
+ return crypto.randomUUID();
21
+ }
22
+ /**
23
+ * Default breach detection rules
24
+ */
25
+ const DEFAULT_RULES = [
26
+ {
27
+ id: "rule_brute_force",
28
+ name: "Brute Force Attack",
29
+ description: "Multiple failed authentication attempts in short time window",
30
+ severity: "high",
31
+ event_pattern: "auth_failed",
32
+ threshold: 10,
33
+ window_seconds: 300,
34
+ actions: ["log", "block", "alert", "create_incident"],
35
+ notification_required: true,
36
+ notification_deadline_hours: 72,
37
+ },
38
+ {
39
+ id: "rule_secrets_leaked",
40
+ name: "Secrets Leaked in Output",
41
+ description: "Detected credentials or secrets in tool output",
42
+ severity: "critical",
43
+ event_pattern: "secrets_detected",
44
+ threshold: 1,
45
+ window_seconds: 1,
46
+ actions: ["log", "alert", "create_incident"],
47
+ notification_required: true,
48
+ notification_deadline_hours: 24,
49
+ },
50
+ {
51
+ id: "rule_cert_violation",
52
+ name: "Certificate Pinning Violation",
53
+ description: "TLS certificate does not match pinned certificates",
54
+ severity: "critical",
55
+ event_pattern: "cert_pinning_violation",
56
+ threshold: 1,
57
+ window_seconds: 1,
58
+ actions: ["log", "block", "alert", "create_incident"],
59
+ notification_required: true,
60
+ notification_deadline_hours: 24,
61
+ },
62
+ {
63
+ id: "rule_prompt_injection",
64
+ name: "Prompt Injection Attempt",
65
+ description: "Detected prompt injection patterns in response",
66
+ severity: "high",
67
+ event_pattern: "prompt_injection",
68
+ threshold: 1,
69
+ window_seconds: 1,
70
+ actions: ["log", "alert"],
71
+ notification_required: false,
72
+ },
73
+ {
74
+ id: "rule_unusual_access",
75
+ name: "Unusual Access Pattern",
76
+ description: "Access patterns outside normal behavior",
77
+ severity: "medium",
78
+ event_pattern: "unusual_access",
79
+ threshold: 5,
80
+ window_seconds: 3600,
81
+ actions: ["log", "alert"],
82
+ notification_required: false,
83
+ },
84
+ {
85
+ id: "rule_mass_export",
86
+ name: "Mass Data Export",
87
+ description: "Large data export request",
88
+ severity: "medium",
89
+ event_pattern: "data_export",
90
+ threshold: 3,
91
+ window_seconds: 3600,
92
+ actions: ["log", "notify_admin"],
93
+ notification_required: false,
94
+ },
95
+ {
96
+ id: "rule_encryption_failure",
97
+ name: "Encryption Failure",
98
+ description: "Encryption or decryption operation failed",
99
+ severity: "high",
100
+ event_pattern: "encryption_error",
101
+ threshold: 3,
102
+ window_seconds: 300,
103
+ actions: ["log", "alert"],
104
+ notification_required: false,
105
+ },
106
+ {
107
+ id: "rule_auth_lockout",
108
+ name: "Authentication Lockout",
109
+ description: "Account locked due to failed attempts",
110
+ severity: "medium",
111
+ event_pattern: "auth_lockout",
112
+ threshold: 1,
113
+ window_seconds: 1,
114
+ actions: ["log", "alert"],
115
+ notification_required: false,
116
+ },
117
+ ];
118
+ /**
119
+ * Breach Detector class
120
+ */
121
+ export class BreachDetector {
122
+ static instance;
123
+ rulesFile;
124
+ rules = new Map();
125
+ eventTrackers = new Map();
126
+ detections = [];
127
+ loaded = false;
128
+ enabled;
129
+ blockedPatterns = new Set();
130
+ constructor() {
131
+ const config = getConfig();
132
+ this.rulesFile = path.join(config.configDir, "breach-rules.json");
133
+ this.enabled = process.env.NLMCP_BREACH_DETECTION !== "false";
134
+ }
135
+ /**
136
+ * Get singleton instance
137
+ */
138
+ static getInstance() {
139
+ if (!BreachDetector.instance) {
140
+ BreachDetector.instance = new BreachDetector();
141
+ }
142
+ return BreachDetector.instance;
143
+ }
144
+ /**
145
+ * Load rules from storage
146
+ */
147
+ async load() {
148
+ if (this.loaded)
149
+ return;
150
+ // Load default rules
151
+ for (const rule of DEFAULT_RULES) {
152
+ this.rules.set(rule.id, rule);
153
+ }
154
+ // Load custom rules
155
+ try {
156
+ if (fs.existsSync(this.rulesFile)) {
157
+ const content = fs.readFileSync(this.rulesFile, "utf-8");
158
+ const data = JSON.parse(content);
159
+ if (data.rules && Array.isArray(data.rules)) {
160
+ for (const rule of data.rules) {
161
+ this.rules.set(rule.id, rule);
162
+ }
163
+ }
164
+ }
165
+ }
166
+ catch {
167
+ // Use defaults if file is corrupted
168
+ }
169
+ this.loaded = true;
170
+ }
171
+ /**
172
+ * Save custom rules to storage
173
+ */
174
+ async save() {
175
+ const dir = path.dirname(this.rulesFile);
176
+ mkdirSecure(dir);
177
+ // Only save custom rules
178
+ const customRules = Array.from(this.rules.values()).filter(r => !DEFAULT_RULES.find(dr => dr.id === r.id));
179
+ const data = {
180
+ version: "1.0.0",
181
+ last_updated: new Date().toISOString(),
182
+ rules: customRules,
183
+ };
184
+ writeFileSecure(this.rulesFile, JSON.stringify(data, null, 2));
185
+ }
186
+ /**
187
+ * Check an event against all rules
188
+ */
189
+ async checkEvent(eventPattern, details) {
190
+ if (!this.enabled) {
191
+ return null;
192
+ }
193
+ await this.load();
194
+ const now = Date.now();
195
+ // Find matching rules
196
+ for (const rule of this.rules.values()) {
197
+ if (!this.matchesPattern(eventPattern, rule.event_pattern)) {
198
+ continue;
199
+ }
200
+ // Get or create event tracker
201
+ let tracker = this.eventTrackers.get(rule.id);
202
+ if (!tracker) {
203
+ tracker = { rule_id: rule.id, events: [] };
204
+ this.eventTrackers.set(rule.id, tracker);
205
+ }
206
+ // Add this event
207
+ tracker.events.push({ timestamp: now, details });
208
+ // Clean up old events outside window
209
+ const windowStart = now - (rule.window_seconds || 1) * 1000;
210
+ tracker.events = tracker.events.filter(e => e.timestamp >= windowStart);
211
+ // Check threshold
212
+ if (tracker.events.length >= (rule.threshold || 1)) {
213
+ // Breach detected!
214
+ const detection = await this.handleBreach(rule, tracker.events, details);
215
+ // Reset tracker after breach
216
+ tracker.events = [];
217
+ return detection;
218
+ }
219
+ }
220
+ return null;
221
+ }
222
+ /**
223
+ * Check if event pattern matches rule pattern
224
+ */
225
+ matchesPattern(event, pattern) {
226
+ // Exact match
227
+ if (event === pattern) {
228
+ return true;
229
+ }
230
+ // Regex pattern
231
+ try {
232
+ const regex = new RegExp(pattern);
233
+ return regex.test(event);
234
+ }
235
+ catch {
236
+ return false;
237
+ }
238
+ }
239
+ /**
240
+ * Handle a detected breach
241
+ */
242
+ async handleBreach(rule, events, details) {
243
+ const detection = {
244
+ id: generateUUID(),
245
+ detected_at: new Date().toISOString(),
246
+ rule,
247
+ event_count: events.length,
248
+ window_start: new Date(events[0].timestamp).toISOString(),
249
+ window_end: new Date(events[events.length - 1].timestamp).toISOString(),
250
+ actions_taken: [],
251
+ blocked: false,
252
+ };
253
+ // Execute actions
254
+ for (const action of rule.actions) {
255
+ try {
256
+ switch (action) {
257
+ case "log":
258
+ await this.actionLog(detection, details);
259
+ break;
260
+ case "alert":
261
+ await this.actionAlert(detection, details);
262
+ break;
263
+ case "block":
264
+ await this.actionBlock(detection);
265
+ break;
266
+ case "notify_admin":
267
+ await this.actionNotifyAdmin(detection, details);
268
+ break;
269
+ case "create_incident":
270
+ const incidentId = await this.actionCreateIncident(detection, details);
271
+ detection.incident_id = incidentId;
272
+ break;
273
+ }
274
+ detection.actions_taken.push(action);
275
+ }
276
+ catch {
277
+ // Continue with other actions
278
+ }
279
+ }
280
+ this.detections.push(detection);
281
+ return detection;
282
+ }
283
+ /**
284
+ * Action: Log the breach
285
+ */
286
+ async actionLog(detection, details) {
287
+ const logger = getComplianceLogger();
288
+ await logger.logBreach(detection.rule.name, detection.rule.severity, detection.rule.notification_required, {
289
+ detection_id: detection.id,
290
+ rule_id: detection.rule.id,
291
+ event_count: detection.event_count,
292
+ ...details,
293
+ });
294
+ }
295
+ /**
296
+ * Action: Send alert
297
+ */
298
+ async actionAlert(detection, details) {
299
+ const alertManager = getAlertManager();
300
+ // Map incident severity to alert severity
301
+ const severityMap = {
302
+ low: "info",
303
+ medium: "warning",
304
+ high: "error",
305
+ critical: "critical",
306
+ };
307
+ const alertSeverity = severityMap[detection.rule.severity] || "warning";
308
+ await alertManager.sendAlert(alertSeverity, `Breach Detected: ${detection.rule.name}`, detection.rule.description, "breach-detector", {
309
+ detection_id: detection.id,
310
+ event_count: detection.event_count,
311
+ window: `${detection.window_start} to ${detection.window_end}`,
312
+ ...details,
313
+ });
314
+ }
315
+ /**
316
+ * Action: Block the pattern
317
+ */
318
+ async actionBlock(detection) {
319
+ this.blockedPatterns.add(detection.rule.event_pattern);
320
+ detection.blocked = true;
321
+ }
322
+ /**
323
+ * Action: Notify admin
324
+ */
325
+ async actionNotifyAdmin(detection, details) {
326
+ // Use alert manager with higher severity for admin notification
327
+ const alertManager = getAlertManager();
328
+ await alertManager.sendAlert("warning", `[Admin] ${detection.rule.name}`, `${detection.rule.description}\n\nEvent count: ${detection.event_count}`, "breach-detector", details);
329
+ }
330
+ /**
331
+ * Action: Create incident
332
+ */
333
+ async actionCreateIncident(detection, details) {
334
+ // This would integrate with incident-manager.ts
335
+ // For now, return a placeholder ID
336
+ const incidentId = `incident_${detection.id.slice(0, 8)}`;
337
+ // Log for now, incident-manager will handle full tracking
338
+ const logger = getComplianceLogger();
339
+ await logger.logSecurityIncident("breach_incident_created", detection.rule.severity, {
340
+ incident_id: incidentId,
341
+ detection_id: detection.id,
342
+ rule_name: detection.rule.name,
343
+ ...details,
344
+ });
345
+ return incidentId;
346
+ }
347
+ /**
348
+ * Check if a pattern is blocked
349
+ */
350
+ isBlocked(pattern) {
351
+ return this.blockedPatterns.has(pattern);
352
+ }
353
+ /**
354
+ * Unblock a pattern
355
+ */
356
+ unblock(pattern) {
357
+ return this.blockedPatterns.delete(pattern);
358
+ }
359
+ /**
360
+ * Get all rules
361
+ */
362
+ async getRules() {
363
+ await this.load();
364
+ return Array.from(this.rules.values());
365
+ }
366
+ /**
367
+ * Add a custom rule
368
+ */
369
+ async addRule(rule) {
370
+ await this.load();
371
+ const newRule = {
372
+ ...rule,
373
+ id: `rule_${generateUUID().slice(0, 8)}`,
374
+ };
375
+ this.rules.set(newRule.id, newRule);
376
+ await this.save();
377
+ return newRule;
378
+ }
379
+ /**
380
+ * Remove a rule
381
+ */
382
+ async removeRule(ruleId) {
383
+ await this.load();
384
+ // Don't allow removing default rules
385
+ if (DEFAULT_RULES.find(r => r.id === ruleId)) {
386
+ return false;
387
+ }
388
+ if (!this.rules.has(ruleId)) {
389
+ return false;
390
+ }
391
+ this.rules.delete(ruleId);
392
+ await this.save();
393
+ return true;
394
+ }
395
+ /**
396
+ * Get recent detections
397
+ */
398
+ getRecentDetections(limit = 100) {
399
+ return this.detections.slice(-limit);
400
+ }
401
+ /**
402
+ * Get detection statistics
403
+ */
404
+ getStats() {
405
+ const bySeverity = {
406
+ low: 0,
407
+ medium: 0,
408
+ high: 0,
409
+ critical: 0,
410
+ };
411
+ const byRule = {};
412
+ for (const detection of this.detections) {
413
+ bySeverity[detection.rule.severity]++;
414
+ byRule[detection.rule.id] = (byRule[detection.rule.id] || 0) + 1;
415
+ }
416
+ return {
417
+ enabled: this.enabled,
418
+ rules_count: this.rules.size,
419
+ blocked_patterns: this.blockedPatterns.size,
420
+ detections_count: this.detections.length,
421
+ by_severity: bySeverity,
422
+ by_rule: byRule,
423
+ };
424
+ }
425
+ }
426
+ // ============================================
427
+ // SINGLETON ACCESS
428
+ // ============================================
429
+ /**
430
+ * Get the breach detector instance
431
+ */
432
+ export function getBreachDetector() {
433
+ return BreachDetector.getInstance();
434
+ }
435
+ // ============================================
436
+ // CONVENIENCE EXPORTS
437
+ // ============================================
438
+ /**
439
+ * Check an event for breach detection
440
+ */
441
+ export async function checkForBreach(eventPattern, details) {
442
+ return getBreachDetector().checkEvent(eventPattern, details);
443
+ }
444
+ /**
445
+ * Check if a pattern is blocked
446
+ */
447
+ export function isPatternBlocked(pattern) {
448
+ return getBreachDetector().isBlocked(pattern);
449
+ }
450
+ /**
451
+ * Get breach detection rules
452
+ */
453
+ export async function getBreachRules() {
454
+ return getBreachDetector().getRules();
455
+ }
456
+ //# sourceMappingURL=breach-detection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breach-detection.js","sourceRoot":"","sources":["../../src/compliance/breach-detection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Change Log
3
+ *
4
+ * Tracks all configuration changes for SOC2 compliance.
5
+ * Provides audit trail for system modifications.
6
+ *
7
+ * Added by Pantheon Security for enterprise compliance support.
8
+ */
9
+ import type { ChangeRecord } from "./types.js";
10
+ /**
11
+ * Change Log class
12
+ */
13
+ export declare class ChangeLog {
14
+ private static instance;
15
+ private logDir;
16
+ private currentLogFile;
17
+ private constructor();
18
+ /**
19
+ * Get singleton instance
20
+ */
21
+ static getInstance(): ChangeLog;
22
+ /**
23
+ * Initialize log file for current month
24
+ */
25
+ private initializeLogFile;
26
+ /**
27
+ * Record a configuration change
28
+ */
29
+ recordChange(component: string, setting: string, oldValue: unknown, newValue: unknown, options?: {
30
+ changedBy?: "user" | "system" | "admin";
31
+ method?: "cli" | "env" | "api" | "config_file";
32
+ requiresApproval?: boolean;
33
+ approvedBy?: string;
34
+ impact?: "low" | "medium" | "high";
35
+ affectedCompliance?: string[];
36
+ }): Promise<ChangeRecord>;
37
+ /**
38
+ * Sanitize value for logging (remove sensitive data)
39
+ */
40
+ private sanitizeValue;
41
+ /**
42
+ * Get changes by component
43
+ */
44
+ getChangesByComponent(component: string, limit?: number): Promise<ChangeRecord[]>;
45
+ /**
46
+ * Get changes by setting
47
+ */
48
+ getChangesBySetting(setting: string, limit?: number): Promise<ChangeRecord[]>;
49
+ /**
50
+ * Get changes within date range
51
+ */
52
+ getChangesInRange(from: Date, to: Date, limit?: number): Promise<ChangeRecord[]>;
53
+ /**
54
+ * Get all changes (most recent first)
55
+ */
56
+ getAllChanges(limit?: number): Promise<ChangeRecord[]>;
57
+ /**
58
+ * Get high-impact changes
59
+ */
60
+ getHighImpactChanges(limit?: number): Promise<ChangeRecord[]>;
61
+ /**
62
+ * Get changes affecting compliance
63
+ */
64
+ getComplianceAffectingChanges(regulation?: string, limit?: number): Promise<ChangeRecord[]>;
65
+ /**
66
+ * Get change statistics
67
+ */
68
+ getStatistics(from?: Date, to?: Date): Promise<{
69
+ total_changes: number;
70
+ by_component: Record<string, number>;
71
+ by_impact: Record<string, number>;
72
+ by_method: Record<string, number>;
73
+ requiring_approval: number;
74
+ compliance_affecting: number;
75
+ }>;
76
+ /**
77
+ * Export changes for audit
78
+ */
79
+ exportForAudit(from: Date, to: Date): Promise<{
80
+ period: {
81
+ from: string;
82
+ to: string;
83
+ };
84
+ total_changes: number;
85
+ high_impact_changes: number;
86
+ compliance_affecting_changes: number;
87
+ changes: ChangeRecord[];
88
+ }>;
89
+ }
90
+ /**
91
+ * Get the change log instance
92
+ */
93
+ export declare function getChangeLog(): ChangeLog;
94
+ /**
95
+ * Record a configuration change
96
+ */
97
+ export declare function recordConfigChange(component: string, setting: string, oldValue: unknown, newValue: unknown, options?: {
98
+ changedBy?: "user" | "system" | "admin";
99
+ method?: "cli" | "env" | "api" | "config_file";
100
+ requiresApproval?: boolean;
101
+ approvedBy?: string;
102
+ impact?: "low" | "medium" | "high";
103
+ affectedCompliance?: string[];
104
+ }): Promise<ChangeRecord>;
105
+ /**
106
+ * Get recent configuration changes
107
+ */
108
+ export declare function getRecentChanges(limit?: number): Promise<ChangeRecord[]>;
109
+ /**
110
+ * Get change statistics
111
+ */
112
+ export declare function getChangeStatistics(from?: Date, to?: Date): Promise<ReturnType<ChangeLog["getStatistics"]>>;
113
+ //# sourceMappingURL=change-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"change-log.d.ts","sourceRoot":"","sources":["../../src/compliance/change-log.ts"],"names":[],"mappings":"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"}