@pan-sec/notebooklm-mcp 1.4.0 → 1.7.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.
- package/README.md +61 -7
- package/SECURITY.md +40 -6
- package/dist/auth/mcp-auth.d.ts.map +1 -1
- package/dist/auth/mcp-auth.js +3 -6
- package/dist/auth/mcp-auth.js.map +1 -1
- package/dist/compliance/alert-manager.d.ts +120 -0
- package/dist/compliance/alert-manager.d.ts.map +1 -0
- package/dist/compliance/alert-manager.js +420 -0
- package/dist/compliance/alert-manager.js.map +1 -0
- package/dist/compliance/breach-detection.d.ts +134 -0
- package/dist/compliance/breach-detection.d.ts.map +1 -0
- package/dist/compliance/breach-detection.js +456 -0
- package/dist/compliance/breach-detection.js.map +1 -0
- package/dist/compliance/change-log.d.ts +113 -0
- package/dist/compliance/change-log.d.ts.map +1 -0
- package/dist/compliance/change-log.js +275 -0
- package/dist/compliance/change-log.js.map +1 -0
- package/dist/compliance/compliance-logger.d.ts +136 -0
- package/dist/compliance/compliance-logger.d.ts.map +1 -0
- package/dist/compliance/compliance-logger.js +425 -0
- package/dist/compliance/compliance-logger.js.map +1 -0
- package/dist/compliance/compliance-tools.d.ts +18 -0
- package/dist/compliance/compliance-tools.d.ts.map +1 -0
- package/dist/compliance/compliance-tools.js +673 -0
- package/dist/compliance/compliance-tools.js.map +1 -0
- package/dist/compliance/consent-manager.d.ts +130 -0
- package/dist/compliance/consent-manager.d.ts.map +1 -0
- package/dist/compliance/consent-manager.js +386 -0
- package/dist/compliance/consent-manager.js.map +1 -0
- package/dist/compliance/dashboard.d.ts +243 -0
- package/dist/compliance/dashboard.d.ts.map +1 -0
- package/dist/compliance/dashboard.js +519 -0
- package/dist/compliance/dashboard.js.map +1 -0
- package/dist/compliance/data-classification.d.ts +117 -0
- package/dist/compliance/data-classification.d.ts.map +1 -0
- package/dist/compliance/data-classification.js +469 -0
- package/dist/compliance/data-classification.js.map +1 -0
- package/dist/compliance/data-erasure.d.ts +110 -0
- package/dist/compliance/data-erasure.d.ts.map +1 -0
- package/dist/compliance/data-erasure.js +501 -0
- package/dist/compliance/data-erasure.js.map +1 -0
- package/dist/compliance/data-export.d.ts +85 -0
- package/dist/compliance/data-export.d.ts.map +1 -0
- package/dist/compliance/data-export.js +394 -0
- package/dist/compliance/data-export.js.map +1 -0
- package/dist/compliance/data-inventory.d.ts +136 -0
- package/dist/compliance/data-inventory.d.ts.map +1 -0
- package/dist/compliance/data-inventory.js +335 -0
- package/dist/compliance/data-inventory.js.map +1 -0
- package/dist/compliance/dsar-handler.d.ts +123 -0
- package/dist/compliance/dsar-handler.d.ts.map +1 -0
- package/dist/compliance/dsar-handler.js +371 -0
- package/dist/compliance/dsar-handler.js.map +1 -0
- package/dist/compliance/evidence-collector.d.ts +187 -0
- package/dist/compliance/evidence-collector.d.ts.map +1 -0
- package/dist/compliance/evidence-collector.js +656 -0
- package/dist/compliance/evidence-collector.js.map +1 -0
- package/dist/compliance/health-monitor.d.ts +111 -0
- package/dist/compliance/health-monitor.d.ts.map +1 -0
- package/dist/compliance/health-monitor.js +509 -0
- package/dist/compliance/health-monitor.js.map +1 -0
- package/dist/compliance/incident-manager.d.ts +131 -0
- package/dist/compliance/incident-manager.d.ts.map +1 -0
- package/dist/compliance/incident-manager.js +418 -0
- package/dist/compliance/incident-manager.js.map +1 -0
- package/dist/compliance/index.d.ts +32 -0
- package/dist/compliance/index.d.ts.map +1 -0
- package/dist/compliance/index.js +35 -0
- package/dist/compliance/index.js.map +1 -0
- package/dist/compliance/policy-docs.d.ts +108 -0
- package/dist/compliance/policy-docs.d.ts.map +1 -0
- package/dist/compliance/policy-docs.js +464 -0
- package/dist/compliance/policy-docs.js.map +1 -0
- package/dist/compliance/privacy-notice-text.d.ts +58 -0
- package/dist/compliance/privacy-notice-text.d.ts.map +1 -0
- package/dist/compliance/privacy-notice-text.js +161 -0
- package/dist/compliance/privacy-notice-text.js.map +1 -0
- package/dist/compliance/privacy-notice.d.ts +128 -0
- package/dist/compliance/privacy-notice.d.ts.map +1 -0
- package/dist/compliance/privacy-notice.js +250 -0
- package/dist/compliance/privacy-notice.js.map +1 -0
- package/dist/compliance/report-generator.d.ts +168 -0
- package/dist/compliance/report-generator.d.ts.map +1 -0
- package/dist/compliance/report-generator.js +830 -0
- package/dist/compliance/report-generator.js.map +1 -0
- package/dist/compliance/retention-engine.d.ts +130 -0
- package/dist/compliance/retention-engine.d.ts.map +1 -0
- package/dist/compliance/retention-engine.js +510 -0
- package/dist/compliance/retention-engine.js.map +1 -0
- package/dist/compliance/siem-exporter.d.ts +150 -0
- package/dist/compliance/siem-exporter.d.ts.map +1 -0
- package/dist/compliance/siem-exporter.js +509 -0
- package/dist/compliance/siem-exporter.js.map +1 -0
- package/dist/compliance/types.d.ts +601 -0
- package/dist/compliance/types.d.ts.map +1 -0
- package/dist/compliance/types.js +22 -0
- package/dist/compliance/types.js.map +1 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +8 -1
- package/dist/config.js.map +1 -1
- package/dist/events/event-emitter.d.ts +45 -0
- package/dist/events/event-emitter.d.ts.map +1 -0
- package/dist/events/event-emitter.js +100 -0
- package/dist/events/event-emitter.js.map +1 -0
- package/dist/events/event-types.d.ts +124 -0
- package/dist/events/event-types.d.ts.map +1 -0
- package/dist/events/event-types.js +18 -0
- package/dist/events/event-types.js.map +1 -0
- package/dist/index.js +59 -2
- package/dist/index.js.map +1 -1
- package/dist/library/notebook-library.d.ts +25 -2
- package/dist/library/notebook-library.d.ts.map +1 -1
- package/dist/library/notebook-library.js +144 -3
- package/dist/library/notebook-library.js.map +1 -1
- package/dist/library/types.d.ts +15 -0
- package/dist/library/types.d.ts.map +1 -1
- package/dist/notebook-creation/audio-manager.d.ts +56 -0
- package/dist/notebook-creation/audio-manager.d.ts.map +1 -0
- package/dist/notebook-creation/audio-manager.js +335 -0
- package/dist/notebook-creation/audio-manager.js.map +1 -0
- package/dist/notebook-creation/discover-creation-flow.d.ts +8 -0
- package/dist/notebook-creation/discover-creation-flow.d.ts.map +1 -0
- package/dist/notebook-creation/discover-creation-flow.js +177 -0
- package/dist/notebook-creation/discover-creation-flow.js.map +1 -0
- package/dist/notebook-creation/discover-quota.d.ts +8 -0
- package/dist/notebook-creation/discover-quota.d.ts.map +1 -0
- package/dist/notebook-creation/discover-quota.js +195 -0
- package/dist/notebook-creation/discover-quota.js.map +1 -0
- package/dist/notebook-creation/discover-source-dialog.d.ts +8 -0
- package/dist/notebook-creation/discover-source-dialog.d.ts.map +1 -0
- package/dist/notebook-creation/discover-source-dialog.js +134 -0
- package/dist/notebook-creation/discover-source-dialog.js.map +1 -0
- package/dist/notebook-creation/discover-sources.d.ts +8 -0
- package/dist/notebook-creation/discover-sources.d.ts.map +1 -0
- package/dist/notebook-creation/discover-sources.js +273 -0
- package/dist/notebook-creation/discover-sources.js.map +1 -0
- package/dist/notebook-creation/discover-text-input.d.ts +7 -0
- package/dist/notebook-creation/discover-text-input.d.ts.map +1 -0
- package/dist/notebook-creation/discover-text-input.js +135 -0
- package/dist/notebook-creation/discover-text-input.js.map +1 -0
- package/dist/notebook-creation/index.d.ts +12 -0
- package/dist/notebook-creation/index.d.ts.map +1 -0
- package/dist/notebook-creation/index.js +12 -0
- package/dist/notebook-creation/index.js.map +1 -0
- package/dist/notebook-creation/notebook-creator.d.ts +95 -0
- package/dist/notebook-creation/notebook-creator.d.ts.map +1 -0
- package/dist/notebook-creation/notebook-creator.js +689 -0
- package/dist/notebook-creation/notebook-creator.js.map +1 -0
- package/dist/notebook-creation/notebook-sync.d.ts +93 -0
- package/dist/notebook-creation/notebook-sync.d.ts.map +1 -0
- package/dist/notebook-creation/notebook-sync.js +370 -0
- package/dist/notebook-creation/notebook-sync.js.map +1 -0
- package/dist/notebook-creation/run-discovery.d.ts +11 -0
- package/dist/notebook-creation/run-discovery.d.ts.map +1 -0
- package/dist/notebook-creation/run-discovery.js +151 -0
- package/dist/notebook-creation/run-discovery.js.map +1 -0
- package/dist/notebook-creation/selector-discovery.d.ts +65 -0
- package/dist/notebook-creation/selector-discovery.d.ts.map +1 -0
- package/dist/notebook-creation/selector-discovery.js +421 -0
- package/dist/notebook-creation/selector-discovery.js.map +1 -0
- package/dist/notebook-creation/selectors.d.ts +150 -0
- package/dist/notebook-creation/selectors.d.ts.map +1 -0
- package/dist/notebook-creation/selectors.js +225 -0
- package/dist/notebook-creation/selectors.js.map +1 -0
- package/dist/notebook-creation/source-manager.d.ts +73 -0
- package/dist/notebook-creation/source-manager.d.ts.map +1 -0
- package/dist/notebook-creation/source-manager.js +486 -0
- package/dist/notebook-creation/source-manager.js.map +1 -0
- package/dist/notebook-creation/test-create.d.ts +8 -0
- package/dist/notebook-creation/test-create.d.ts.map +1 -0
- package/dist/notebook-creation/test-create.js +72 -0
- package/dist/notebook-creation/test-create.js.map +1 -0
- package/dist/notebook-creation/types.d.ts +173 -0
- package/dist/notebook-creation/types.d.ts.map +1 -0
- package/dist/notebook-creation/types.js +5 -0
- package/dist/notebook-creation/types.js.map +1 -0
- package/dist/quota/index.d.ts +8 -0
- package/dist/quota/index.d.ts.map +1 -0
- package/dist/quota/index.js +8 -0
- package/dist/quota/index.js.map +1 -0
- package/dist/quota/quota-manager.d.ts +125 -0
- package/dist/quota/quota-manager.d.ts.map +1 -0
- package/dist/quota/quota-manager.js +330 -0
- package/dist/quota/quota-manager.js.map +1 -0
- package/dist/session/session-manager.d.ts +5 -0
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +6 -0
- package/dist/session/session-manager.js.map +1 -1
- package/dist/session/shared-context-manager.d.ts.map +1 -1
- package/dist/session/shared-context-manager.js +2 -1
- package/dist/session/shared-context-manager.js.map +1 -1
- package/dist/tools/definitions/notebook-management.d.ts.map +1 -1
- package/dist/tools/definitions/notebook-management.js +525 -0
- package/dist/tools/definitions/notebook-management.js.map +1 -1
- package/dist/tools/definitions/system.d.ts.map +1 -1
- package/dist/tools/definitions/system.js +158 -0
- package/dist/tools/definitions/system.js.map +1 -1
- package/dist/tools/handlers.d.ts +225 -0
- package/dist/tools/handlers.d.ts.map +1 -1
- package/dist/tools/handlers.js +911 -0
- package/dist/tools/handlers.js.map +1 -1
- package/dist/utils/audit-logger.d.ts +21 -1
- package/dist/utils/audit-logger.d.ts.map +1 -1
- package/dist/utils/audit-logger.js +53 -4
- package/dist/utils/audit-logger.js.map +1 -1
- package/dist/utils/crypto.d.ts.map +1 -1
- package/dist/utils/crypto.js +8 -15
- package/dist/utils/crypto.js.map +1 -1
- package/dist/utils/file-permissions.d.ts +85 -0
- package/dist/utils/file-permissions.d.ts.map +1 -0
- package/dist/utils/file-permissions.js +180 -0
- package/dist/utils/file-permissions.js.map +1 -0
- package/dist/utils/settings-manager.d.ts.map +1 -1
- package/dist/utils/settings-manager.js +6 -11
- package/dist/utils/settings-manager.js.map +1 -1
- package/dist/webhooks/index.d.ts +8 -0
- package/dist/webhooks/index.d.ts.map +1 -0
- package/dist/webhooks/index.js +8 -0
- package/dist/webhooks/index.js.map +1 -0
- package/dist/webhooks/types.d.ts +57 -0
- package/dist/webhooks/types.d.ts.map +1 -0
- package/dist/webhooks/types.js +5 -0
- package/dist/webhooks/types.js.map +1 -0
- package/dist/webhooks/webhook-dispatcher.d.ts +120 -0
- package/dist/webhooks/webhook-dispatcher.d.ts.map +1 -0
- package/dist/webhooks/webhook-dispatcher.js +519 -0
- package/dist/webhooks/webhook-dispatcher.js.map +1 -0
- package/docs/COMPLIANCE-SPEC.md +1452 -0
- package/package.json +30 -4
|
@@ -0,0 +1,275 @@
|
|
|
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 crypto from "crypto";
|
|
10
|
+
import path from "path";
|
|
11
|
+
import fs from "fs";
|
|
12
|
+
import { getConfig } from "../config.js";
|
|
13
|
+
import { mkdirSecure, appendFileSecure } from "../utils/file-permissions.js";
|
|
14
|
+
import { getComplianceLogger } from "./compliance-logger.js";
|
|
15
|
+
/**
|
|
16
|
+
* Generate a UUID v4
|
|
17
|
+
*/
|
|
18
|
+
function generateUUID() {
|
|
19
|
+
return crypto.randomUUID();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Change Log class
|
|
23
|
+
*/
|
|
24
|
+
export class ChangeLog {
|
|
25
|
+
static instance;
|
|
26
|
+
logDir;
|
|
27
|
+
currentLogFile = "";
|
|
28
|
+
constructor() {
|
|
29
|
+
const config = getConfig();
|
|
30
|
+
this.logDir = path.join(config.dataDir, "compliance", "changes");
|
|
31
|
+
mkdirSecure(this.logDir);
|
|
32
|
+
this.initializeLogFile();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get singleton instance
|
|
36
|
+
*/
|
|
37
|
+
static getInstance() {
|
|
38
|
+
if (!ChangeLog.instance) {
|
|
39
|
+
ChangeLog.instance = new ChangeLog();
|
|
40
|
+
}
|
|
41
|
+
return ChangeLog.instance;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Initialize log file for current month
|
|
45
|
+
*/
|
|
46
|
+
initializeLogFile() {
|
|
47
|
+
const now = new Date();
|
|
48
|
+
const year = now.getFullYear();
|
|
49
|
+
const month = String(now.getMonth() + 1).padStart(2, "0");
|
|
50
|
+
this.currentLogFile = path.join(this.logDir, `changes-${year}-${month}.jsonl`);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Record a configuration change
|
|
54
|
+
*/
|
|
55
|
+
async recordChange(component, setting, oldValue, newValue, options = {}) {
|
|
56
|
+
// Ensure log file is current
|
|
57
|
+
this.initializeLogFile();
|
|
58
|
+
const record = {
|
|
59
|
+
id: generateUUID(),
|
|
60
|
+
timestamp: new Date().toISOString(),
|
|
61
|
+
component,
|
|
62
|
+
setting,
|
|
63
|
+
old_value: this.sanitizeValue(oldValue),
|
|
64
|
+
new_value: this.sanitizeValue(newValue),
|
|
65
|
+
changed_by: options.changedBy || "system",
|
|
66
|
+
method: options.method || "api",
|
|
67
|
+
requires_approval: options.requiresApproval || false,
|
|
68
|
+
approved_by: options.approvedBy,
|
|
69
|
+
approved_at: options.approvedBy ? new Date().toISOString() : undefined,
|
|
70
|
+
impact: options.impact || "low",
|
|
71
|
+
affected_compliance: options.affectedCompliance || [],
|
|
72
|
+
};
|
|
73
|
+
// Write to log file
|
|
74
|
+
const line = JSON.stringify(record) + "\n";
|
|
75
|
+
appendFileSecure(this.currentLogFile, line);
|
|
76
|
+
// Also log to compliance logger
|
|
77
|
+
const logger = getComplianceLogger();
|
|
78
|
+
await logger.logPolicyChange(setting, oldValue, newValue, record.changed_by);
|
|
79
|
+
return record;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Sanitize value for logging (remove sensitive data)
|
|
83
|
+
*/
|
|
84
|
+
sanitizeValue(value) {
|
|
85
|
+
if (value === null || value === undefined) {
|
|
86
|
+
return value;
|
|
87
|
+
}
|
|
88
|
+
if (typeof value === "string") {
|
|
89
|
+
// Check for sensitive patterns
|
|
90
|
+
if (/password|secret|token|key|credential|auth/i.test(value) ||
|
|
91
|
+
value.length > 100) {
|
|
92
|
+
return "[REDACTED]";
|
|
93
|
+
}
|
|
94
|
+
return value;
|
|
95
|
+
}
|
|
96
|
+
if (typeof value === "object") {
|
|
97
|
+
return "[object]";
|
|
98
|
+
}
|
|
99
|
+
return value;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get changes by component
|
|
103
|
+
*/
|
|
104
|
+
async getChangesByComponent(component, limit = 100) {
|
|
105
|
+
const changes = await this.getAllChanges(limit * 10);
|
|
106
|
+
return changes
|
|
107
|
+
.filter(c => c.component === component)
|
|
108
|
+
.slice(0, limit);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get changes by setting
|
|
112
|
+
*/
|
|
113
|
+
async getChangesBySetting(setting, limit = 100) {
|
|
114
|
+
const changes = await this.getAllChanges(limit * 10);
|
|
115
|
+
return changes
|
|
116
|
+
.filter(c => c.setting === setting)
|
|
117
|
+
.slice(0, limit);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get changes within date range
|
|
121
|
+
*/
|
|
122
|
+
async getChangesInRange(from, to, limit = 1000) {
|
|
123
|
+
const changes = await this.getAllChanges(limit * 2);
|
|
124
|
+
return changes
|
|
125
|
+
.filter(c => {
|
|
126
|
+
const date = new Date(c.timestamp);
|
|
127
|
+
return date >= from && date <= to;
|
|
128
|
+
})
|
|
129
|
+
.slice(0, limit);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get all changes (most recent first)
|
|
133
|
+
*/
|
|
134
|
+
async getAllChanges(limit = 100) {
|
|
135
|
+
const changes = [];
|
|
136
|
+
try {
|
|
137
|
+
if (!fs.existsSync(this.logDir)) {
|
|
138
|
+
return changes;
|
|
139
|
+
}
|
|
140
|
+
const files = fs.readdirSync(this.logDir)
|
|
141
|
+
.filter(f => f.startsWith("changes-") && f.endsWith(".jsonl"))
|
|
142
|
+
.sort()
|
|
143
|
+
.reverse();
|
|
144
|
+
for (const file of files) {
|
|
145
|
+
const filePath = path.join(this.logDir, file);
|
|
146
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
147
|
+
const lines = content.trim().split("\n").filter(l => l);
|
|
148
|
+
for (const line of lines.reverse()) {
|
|
149
|
+
try {
|
|
150
|
+
const record = JSON.parse(line);
|
|
151
|
+
changes.push(record);
|
|
152
|
+
if (changes.length >= limit)
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
// Skip malformed lines
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
if (changes.length >= limit)
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// Return what we have
|
|
165
|
+
}
|
|
166
|
+
return changes;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Get high-impact changes
|
|
170
|
+
*/
|
|
171
|
+
async getHighImpactChanges(limit = 100) {
|
|
172
|
+
const changes = await this.getAllChanges(limit * 5);
|
|
173
|
+
return changes
|
|
174
|
+
.filter(c => c.impact === "high")
|
|
175
|
+
.slice(0, limit);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Get changes affecting compliance
|
|
179
|
+
*/
|
|
180
|
+
async getComplianceAffectingChanges(regulation, limit = 100) {
|
|
181
|
+
const changes = await this.getAllChanges(limit * 5);
|
|
182
|
+
return changes
|
|
183
|
+
.filter(c => {
|
|
184
|
+
if (c.affected_compliance.length === 0)
|
|
185
|
+
return false;
|
|
186
|
+
if (regulation) {
|
|
187
|
+
return c.affected_compliance.includes(regulation);
|
|
188
|
+
}
|
|
189
|
+
return true;
|
|
190
|
+
})
|
|
191
|
+
.slice(0, limit);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get change statistics
|
|
195
|
+
*/
|
|
196
|
+
async getStatistics(from, to) {
|
|
197
|
+
const allChanges = await this.getAllChanges(10000);
|
|
198
|
+
let changes = allChanges;
|
|
199
|
+
if (from) {
|
|
200
|
+
changes = changes.filter(c => new Date(c.timestamp) >= from);
|
|
201
|
+
}
|
|
202
|
+
if (to) {
|
|
203
|
+
changes = changes.filter(c => new Date(c.timestamp) <= to);
|
|
204
|
+
}
|
|
205
|
+
const byComponent = {};
|
|
206
|
+
const byImpact = {};
|
|
207
|
+
const byMethod = {};
|
|
208
|
+
let requiringApproval = 0;
|
|
209
|
+
let complianceAffecting = 0;
|
|
210
|
+
for (const change of changes) {
|
|
211
|
+
byComponent[change.component] = (byComponent[change.component] || 0) + 1;
|
|
212
|
+
byImpact[change.impact] = (byImpact[change.impact] || 0) + 1;
|
|
213
|
+
byMethod[change.method] = (byMethod[change.method] || 0) + 1;
|
|
214
|
+
if (change.requires_approval)
|
|
215
|
+
requiringApproval++;
|
|
216
|
+
if (change.affected_compliance.length > 0)
|
|
217
|
+
complianceAffecting++;
|
|
218
|
+
}
|
|
219
|
+
return {
|
|
220
|
+
total_changes: changes.length,
|
|
221
|
+
by_component: byComponent,
|
|
222
|
+
by_impact: byImpact,
|
|
223
|
+
by_method: byMethod,
|
|
224
|
+
requiring_approval: requiringApproval,
|
|
225
|
+
compliance_affecting: complianceAffecting,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Export changes for audit
|
|
230
|
+
*/
|
|
231
|
+
async exportForAudit(from, to) {
|
|
232
|
+
const changes = await this.getChangesInRange(from, to, 10000);
|
|
233
|
+
return {
|
|
234
|
+
period: {
|
|
235
|
+
from: from.toISOString(),
|
|
236
|
+
to: to.toISOString(),
|
|
237
|
+
},
|
|
238
|
+
total_changes: changes.length,
|
|
239
|
+
high_impact_changes: changes.filter(c => c.impact === "high").length,
|
|
240
|
+
compliance_affecting_changes: changes.filter(c => c.affected_compliance.length > 0).length,
|
|
241
|
+
changes,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
// ============================================
|
|
246
|
+
// SINGLETON ACCESS
|
|
247
|
+
// ============================================
|
|
248
|
+
/**
|
|
249
|
+
* Get the change log instance
|
|
250
|
+
*/
|
|
251
|
+
export function getChangeLog() {
|
|
252
|
+
return ChangeLog.getInstance();
|
|
253
|
+
}
|
|
254
|
+
// ============================================
|
|
255
|
+
// CONVENIENCE EXPORTS
|
|
256
|
+
// ============================================
|
|
257
|
+
/**
|
|
258
|
+
* Record a configuration change
|
|
259
|
+
*/
|
|
260
|
+
export async function recordConfigChange(component, setting, oldValue, newValue, options) {
|
|
261
|
+
return getChangeLog().recordChange(component, setting, oldValue, newValue, options);
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Get recent configuration changes
|
|
265
|
+
*/
|
|
266
|
+
export async function getRecentChanges(limit = 100) {
|
|
267
|
+
return getChangeLog().getAllChanges(limit);
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Get change statistics
|
|
271
|
+
*/
|
|
272
|
+
export async function getChangeStatistics(from, to) {
|
|
273
|
+
return getChangeLog().getStatistics(from, to);
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=change-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-log.js","sourceRoot":"","sources":["../../src/compliance/change-log.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compliance Logger
|
|
3
|
+
*
|
|
4
|
+
* Structured logging for compliance events, separate from operational audit logs.
|
|
5
|
+
* Implements hash-chaining for tamper detection and supports 7-year retention (CSSF).
|
|
6
|
+
*
|
|
7
|
+
* Added by Pantheon Security for enterprise compliance support.
|
|
8
|
+
*/
|
|
9
|
+
import type { ComplianceEvent, ComplianceEventCategory, ComplianceActor, ComplianceResource, LegalBasis, DataCategory } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Compliance Logger class
|
|
12
|
+
*/
|
|
13
|
+
export declare class ComplianceLogger {
|
|
14
|
+
private static instance;
|
|
15
|
+
private complianceDir;
|
|
16
|
+
private enabled;
|
|
17
|
+
private retentionYears;
|
|
18
|
+
private lastHash;
|
|
19
|
+
private constructor();
|
|
20
|
+
/**
|
|
21
|
+
* Get singleton instance
|
|
22
|
+
*/
|
|
23
|
+
static getInstance(): ComplianceLogger;
|
|
24
|
+
/**
|
|
25
|
+
* Ensure compliance directory exists
|
|
26
|
+
*/
|
|
27
|
+
private ensureComplianceDir;
|
|
28
|
+
/**
|
|
29
|
+
* Get the current log file path (monthly rotation)
|
|
30
|
+
*/
|
|
31
|
+
private getLogFilePath;
|
|
32
|
+
/**
|
|
33
|
+
* Load the last hash from the current log file
|
|
34
|
+
*/
|
|
35
|
+
private loadLastHash;
|
|
36
|
+
/**
|
|
37
|
+
* Create a compliance event
|
|
38
|
+
*/
|
|
39
|
+
private createEvent;
|
|
40
|
+
/**
|
|
41
|
+
* Write event to log file
|
|
42
|
+
*/
|
|
43
|
+
private writeEvent;
|
|
44
|
+
/**
|
|
45
|
+
* Log a compliance event
|
|
46
|
+
*/
|
|
47
|
+
log(category: ComplianceEventCategory, eventType: string, actor: Partial<ComplianceActor>, outcome: "success" | "failure" | "pending", options?: {
|
|
48
|
+
resource?: ComplianceResource;
|
|
49
|
+
details?: Record<string, unknown>;
|
|
50
|
+
legalBasis?: LegalBasis;
|
|
51
|
+
dataCategories?: DataCategory[];
|
|
52
|
+
retentionDays?: number;
|
|
53
|
+
failureReason?: string;
|
|
54
|
+
}): Promise<ComplianceEvent>;
|
|
55
|
+
/**
|
|
56
|
+
* Log consent event
|
|
57
|
+
*/
|
|
58
|
+
logConsent(action: "granted" | "revoked" | "updated", actor: Partial<ComplianceActor>, purposes: string[], success: boolean, details?: Record<string, unknown>): Promise<ComplianceEvent>;
|
|
59
|
+
/**
|
|
60
|
+
* Log data access event
|
|
61
|
+
*/
|
|
62
|
+
logDataAccess(action: "view" | "export" | "delete" | "request", actor: Partial<ComplianceActor>, dataType: string, success: boolean, details?: Record<string, unknown>): Promise<ComplianceEvent>;
|
|
63
|
+
/**
|
|
64
|
+
* Log data export event (GDPR Article 20)
|
|
65
|
+
*/
|
|
66
|
+
logDataExport(actor: Partial<ComplianceActor>, dataTypes: string[], success: boolean, details?: Record<string, unknown>): Promise<ComplianceEvent>;
|
|
67
|
+
/**
|
|
68
|
+
* Log data deletion event (GDPR Article 17)
|
|
69
|
+
*/
|
|
70
|
+
logDataDeletion(actor: Partial<ComplianceActor>, dataType: string, itemCount: number, success: boolean, details?: Record<string, unknown>): Promise<ComplianceEvent>;
|
|
71
|
+
/**
|
|
72
|
+
* Log security incident
|
|
73
|
+
*/
|
|
74
|
+
logSecurityIncident(incidentType: string, severity: "low" | "medium" | "high" | "critical", details: Record<string, unknown>): Promise<ComplianceEvent>;
|
|
75
|
+
/**
|
|
76
|
+
* Log policy change
|
|
77
|
+
*/
|
|
78
|
+
logPolicyChange(setting: string, oldValue: unknown, newValue: unknown, changedBy: "user" | "system" | "admin"): Promise<ComplianceEvent>;
|
|
79
|
+
/**
|
|
80
|
+
* Log access control event
|
|
81
|
+
*/
|
|
82
|
+
logAccessControl(action: "login" | "logout" | "auth_failed" | "locked_out", actor: Partial<ComplianceActor>, success: boolean, details?: Record<string, unknown>): Promise<ComplianceEvent>;
|
|
83
|
+
/**
|
|
84
|
+
* Log retention event
|
|
85
|
+
*/
|
|
86
|
+
logRetention(action: "cleanup" | "archive" | "delete", dataType: string, itemCount: number, details?: Record<string, unknown>): Promise<ComplianceEvent>;
|
|
87
|
+
/**
|
|
88
|
+
* Log breach notification
|
|
89
|
+
*/
|
|
90
|
+
logBreach(breachType: string, severity: "low" | "medium" | "high" | "critical", notificationSent: boolean, details: Record<string, unknown>): Promise<ComplianceEvent>;
|
|
91
|
+
/**
|
|
92
|
+
* Get events by category
|
|
93
|
+
*/
|
|
94
|
+
getEvents(category?: ComplianceEventCategory, from?: Date, to?: Date, limit?: number): Promise<ComplianceEvent[]>;
|
|
95
|
+
/**
|
|
96
|
+
* Get log files sorted by date (newest first)
|
|
97
|
+
*/
|
|
98
|
+
private getLogFiles;
|
|
99
|
+
/**
|
|
100
|
+
* Verify hash chain integrity
|
|
101
|
+
*/
|
|
102
|
+
verifyIntegrity(): Promise<{
|
|
103
|
+
valid: boolean;
|
|
104
|
+
lastValidEvent?: string;
|
|
105
|
+
firstInvalidEvent?: string;
|
|
106
|
+
totalEvents: number;
|
|
107
|
+
validEvents: number;
|
|
108
|
+
}>;
|
|
109
|
+
/**
|
|
110
|
+
* Get compliance log statistics
|
|
111
|
+
*/
|
|
112
|
+
getStats(): Promise<{
|
|
113
|
+
enabled: boolean;
|
|
114
|
+
retentionYears: number;
|
|
115
|
+
complianceDir: string;
|
|
116
|
+
logFileCount: number;
|
|
117
|
+
totalEvents: number;
|
|
118
|
+
eventsByCategory: Record<ComplianceEventCategory, number>;
|
|
119
|
+
}>;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get the compliance logger instance
|
|
123
|
+
*/
|
|
124
|
+
export declare function getComplianceLogger(): ComplianceLogger;
|
|
125
|
+
/**
|
|
126
|
+
* Log a compliance event (convenience function)
|
|
127
|
+
*/
|
|
128
|
+
export declare function logComplianceEvent(category: ComplianceEventCategory, eventType: string, actor: Partial<ComplianceActor>, outcome: "success" | "failure" | "pending", options?: {
|
|
129
|
+
resource?: ComplianceResource;
|
|
130
|
+
details?: Record<string, unknown>;
|
|
131
|
+
legalBasis?: LegalBasis;
|
|
132
|
+
dataCategories?: DataCategory[];
|
|
133
|
+
retentionDays?: number;
|
|
134
|
+
failureReason?: string;
|
|
135
|
+
}): Promise<ComplianceEvent>;
|
|
136
|
+
//# sourceMappingURL=compliance-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compliance-logger.d.ts","sourceRoot":"","sources":["../../src/compliance/compliance-logger.ts"],"names":[],"mappings":"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"}
|