@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.
- 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/library/notebook-library.d.ts.map +1 -1
- package/dist/library/notebook-library.js +2 -1
- package/dist/library/notebook-library.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/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/docs/COMPLIANCE-SPEC.md +1452 -0
- package/package.json +30 -4
|
@@ -0,0 +1,501 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data Erasure Tool
|
|
3
|
+
*
|
|
4
|
+
* Complete deletion of user data with secure wiping.
|
|
5
|
+
* Implements GDPR Article 17 (Right to Erasure / Right to be Forgotten).
|
|
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 { getConsentManager } from "./consent-manager.js";
|
|
16
|
+
import { getPrivacyNoticeManager } from "./privacy-notice.js";
|
|
17
|
+
/**
|
|
18
|
+
* Generate a UUID v4
|
|
19
|
+
*/
|
|
20
|
+
function generateUUID() {
|
|
21
|
+
return crypto.randomUUID();
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Default erasure scope
|
|
25
|
+
*/
|
|
26
|
+
const DEFAULT_SCOPE = {
|
|
27
|
+
notebooks: true,
|
|
28
|
+
settings: true,
|
|
29
|
+
browser_data: true,
|
|
30
|
+
audit_logs: false, // Audit logs have legal retention requirements
|
|
31
|
+
compliance_events: false, // Must keep erasure record
|
|
32
|
+
encryption_keys: false, // Careful with this!
|
|
33
|
+
complete_erasure: false,
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Secure file overwrite before deletion
|
|
37
|
+
*/
|
|
38
|
+
function secureOverwrite(filePath, passes = 3) {
|
|
39
|
+
try {
|
|
40
|
+
const stats = fs.statSync(filePath);
|
|
41
|
+
const size = stats.size;
|
|
42
|
+
// Multiple passes of random data
|
|
43
|
+
for (let pass = 0; pass < passes; pass++) {
|
|
44
|
+
const randomData = crypto.randomBytes(size);
|
|
45
|
+
fs.writeFileSync(filePath, randomData);
|
|
46
|
+
}
|
|
47
|
+
// Final pass with zeros
|
|
48
|
+
const zeros = Buffer.alloc(size, 0);
|
|
49
|
+
fs.writeFileSync(filePath, zeros);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// File might not exist or can't be written to
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Recursively delete a directory with secure wiping
|
|
57
|
+
*/
|
|
58
|
+
function secureDeleteDirectory(dirPath, secureWipe = true) {
|
|
59
|
+
let files = 0;
|
|
60
|
+
let bytes = 0;
|
|
61
|
+
try {
|
|
62
|
+
if (!fs.existsSync(dirPath)) {
|
|
63
|
+
return { files, bytes };
|
|
64
|
+
}
|
|
65
|
+
const entries = fs.readdirSync(dirPath, { withFileTypes: true });
|
|
66
|
+
for (const entry of entries) {
|
|
67
|
+
const fullPath = path.join(dirPath, entry.name);
|
|
68
|
+
if (entry.isDirectory()) {
|
|
69
|
+
const result = secureDeleteDirectory(fullPath, secureWipe);
|
|
70
|
+
files += result.files;
|
|
71
|
+
bytes += result.bytes;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
try {
|
|
75
|
+
const stats = fs.statSync(fullPath);
|
|
76
|
+
bytes += stats.size;
|
|
77
|
+
files++;
|
|
78
|
+
if (secureWipe) {
|
|
79
|
+
secureOverwrite(fullPath);
|
|
80
|
+
}
|
|
81
|
+
fs.unlinkSync(fullPath);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Continue with other files
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Remove the directory itself
|
|
89
|
+
fs.rmdirSync(dirPath);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// Directory might not exist
|
|
93
|
+
}
|
|
94
|
+
return { files, bytes };
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Data Erasure Manager class
|
|
98
|
+
*/
|
|
99
|
+
export class DataErasureManager {
|
|
100
|
+
static instance;
|
|
101
|
+
erasureLogFile;
|
|
102
|
+
erasureRequests = [];
|
|
103
|
+
loaded = false;
|
|
104
|
+
constructor() {
|
|
105
|
+
const config = getConfig();
|
|
106
|
+
this.erasureLogFile = path.join(config.dataDir, "compliance", "erasure-log.json");
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get singleton instance
|
|
110
|
+
*/
|
|
111
|
+
static getInstance() {
|
|
112
|
+
if (!DataErasureManager.instance) {
|
|
113
|
+
DataErasureManager.instance = new DataErasureManager();
|
|
114
|
+
}
|
|
115
|
+
return DataErasureManager.instance;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Load erasure history from storage
|
|
119
|
+
*/
|
|
120
|
+
async load() {
|
|
121
|
+
if (this.loaded)
|
|
122
|
+
return;
|
|
123
|
+
try {
|
|
124
|
+
if (fs.existsSync(this.erasureLogFile)) {
|
|
125
|
+
const content = fs.readFileSync(this.erasureLogFile, "utf-8");
|
|
126
|
+
const data = JSON.parse(content);
|
|
127
|
+
this.erasureRequests = data.requests || [];
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
this.erasureRequests = [];
|
|
132
|
+
}
|
|
133
|
+
this.loaded = true;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Save erasure history to storage
|
|
137
|
+
*/
|
|
138
|
+
async save() {
|
|
139
|
+
const dir = path.dirname(this.erasureLogFile);
|
|
140
|
+
mkdirSecure(dir);
|
|
141
|
+
const data = {
|
|
142
|
+
version: "1.0.0",
|
|
143
|
+
last_updated: new Date().toISOString(),
|
|
144
|
+
requests: this.erasureRequests,
|
|
145
|
+
};
|
|
146
|
+
writeFileSecure(this.erasureLogFile, JSON.stringify(data, null, 2));
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Create a new erasure request
|
|
150
|
+
*/
|
|
151
|
+
async createRequest(scope = {}) {
|
|
152
|
+
await this.load();
|
|
153
|
+
const fullScope = { ...DEFAULT_SCOPE, ...scope };
|
|
154
|
+
// If complete_erasure is true, set all to true except compliance_events
|
|
155
|
+
if (fullScope.complete_erasure) {
|
|
156
|
+
fullScope.notebooks = true;
|
|
157
|
+
fullScope.settings = true;
|
|
158
|
+
fullScope.browser_data = true;
|
|
159
|
+
fullScope.audit_logs = true;
|
|
160
|
+
fullScope.encryption_keys = true;
|
|
161
|
+
// compliance_events stays false - we need to keep the erasure record
|
|
162
|
+
}
|
|
163
|
+
const request = {
|
|
164
|
+
request_id: generateUUID(),
|
|
165
|
+
requested_at: new Date().toISOString(),
|
|
166
|
+
scope: fullScope,
|
|
167
|
+
confirmed: false,
|
|
168
|
+
confirmation_method: "explicit",
|
|
169
|
+
items_deleted: [],
|
|
170
|
+
erasure_record_retention_days: 7 * 365, // 7 years per CSSF
|
|
171
|
+
};
|
|
172
|
+
this.erasureRequests.push(request);
|
|
173
|
+
await this.save();
|
|
174
|
+
// Log the request
|
|
175
|
+
const logger = getComplianceLogger();
|
|
176
|
+
await logger.log("data_deletion", "erasure_requested", { type: "user" }, "pending", {
|
|
177
|
+
details: {
|
|
178
|
+
request_id: request.request_id,
|
|
179
|
+
scope: fullScope,
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
return request;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Confirm and execute an erasure request
|
|
186
|
+
*/
|
|
187
|
+
async confirmAndExecute(requestId) {
|
|
188
|
+
await this.load();
|
|
189
|
+
const request = this.erasureRequests.find(r => r.request_id === requestId);
|
|
190
|
+
if (!request) {
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
if (request.confirmed) {
|
|
194
|
+
return request; // Already executed
|
|
195
|
+
}
|
|
196
|
+
const config = getConfig();
|
|
197
|
+
const results = [];
|
|
198
|
+
// Execute erasure based on scope
|
|
199
|
+
if (request.scope.notebooks) {
|
|
200
|
+
const result = await this.eraseNotebooks(config);
|
|
201
|
+
results.push(result);
|
|
202
|
+
}
|
|
203
|
+
if (request.scope.settings) {
|
|
204
|
+
const result = await this.eraseSettings(config);
|
|
205
|
+
results.push(result);
|
|
206
|
+
}
|
|
207
|
+
if (request.scope.browser_data) {
|
|
208
|
+
const result = await this.eraseBrowserData(config);
|
|
209
|
+
results.push(result);
|
|
210
|
+
}
|
|
211
|
+
if (request.scope.audit_logs) {
|
|
212
|
+
const result = await this.eraseAuditLogs(config);
|
|
213
|
+
results.push(result);
|
|
214
|
+
}
|
|
215
|
+
if (request.scope.encryption_keys) {
|
|
216
|
+
const result = await this.eraseEncryptionKeys(config);
|
|
217
|
+
results.push(result);
|
|
218
|
+
}
|
|
219
|
+
// Also erase consent and privacy acknowledgment records
|
|
220
|
+
if (request.scope.complete_erasure || request.scope.settings) {
|
|
221
|
+
await this.eraseConsentRecords();
|
|
222
|
+
await this.erasePrivacyAcknowledgments();
|
|
223
|
+
}
|
|
224
|
+
// Update request
|
|
225
|
+
request.confirmed = true;
|
|
226
|
+
request.confirmation_method = "explicit";
|
|
227
|
+
request.executed_at = new Date().toISOString();
|
|
228
|
+
request.items_deleted = results;
|
|
229
|
+
await this.save();
|
|
230
|
+
// Log completion
|
|
231
|
+
const logger = getComplianceLogger();
|
|
232
|
+
const totalItems = results.reduce((sum, r) => sum + r.items_deleted, 0);
|
|
233
|
+
const totalBytes = results.reduce((sum, r) => sum + r.size_bytes, 0);
|
|
234
|
+
await logger.logDataDeletion({ type: "user" }, "multiple_data_types", totalItems, true, {
|
|
235
|
+
request_id: requestId,
|
|
236
|
+
total_bytes: totalBytes,
|
|
237
|
+
data_types: results.map(r => r.data_type),
|
|
238
|
+
});
|
|
239
|
+
return request;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Erase notebook library
|
|
243
|
+
*/
|
|
244
|
+
async eraseNotebooks(config) {
|
|
245
|
+
const libraryPath = path.join(config.configDir, "library.json");
|
|
246
|
+
const result = {
|
|
247
|
+
data_type: "notebook_library",
|
|
248
|
+
path: libraryPath,
|
|
249
|
+
items_deleted: 0,
|
|
250
|
+
size_bytes: 0,
|
|
251
|
+
method: "overwrite",
|
|
252
|
+
verified: false,
|
|
253
|
+
};
|
|
254
|
+
try {
|
|
255
|
+
if (fs.existsSync(libraryPath)) {
|
|
256
|
+
const stats = fs.statSync(libraryPath);
|
|
257
|
+
result.size_bytes = stats.size;
|
|
258
|
+
result.items_deleted = 1;
|
|
259
|
+
secureOverwrite(libraryPath);
|
|
260
|
+
fs.unlinkSync(libraryPath);
|
|
261
|
+
result.verified = !fs.existsSync(libraryPath);
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
result.verified = true;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
catch {
|
|
268
|
+
result.verified = false;
|
|
269
|
+
}
|
|
270
|
+
return result;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Erase user settings
|
|
274
|
+
*/
|
|
275
|
+
async eraseSettings(config) {
|
|
276
|
+
const settingsPath = path.join(config.configDir, "settings.json");
|
|
277
|
+
const result = {
|
|
278
|
+
data_type: "user_settings",
|
|
279
|
+
path: settingsPath,
|
|
280
|
+
items_deleted: 0,
|
|
281
|
+
size_bytes: 0,
|
|
282
|
+
method: "delete",
|
|
283
|
+
verified: false,
|
|
284
|
+
};
|
|
285
|
+
try {
|
|
286
|
+
if (fs.existsSync(settingsPath)) {
|
|
287
|
+
const stats = fs.statSync(settingsPath);
|
|
288
|
+
result.size_bytes = stats.size;
|
|
289
|
+
result.items_deleted = 1;
|
|
290
|
+
fs.unlinkSync(settingsPath);
|
|
291
|
+
result.verified = !fs.existsSync(settingsPath);
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
result.verified = true;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
result.verified = false;
|
|
299
|
+
}
|
|
300
|
+
return result;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Erase browser data
|
|
304
|
+
*/
|
|
305
|
+
async eraseBrowserData(config) {
|
|
306
|
+
const browserStateDir = path.join(config.dataDir, "browser_state");
|
|
307
|
+
const chromeProfileDir = path.join(config.dataDir, "chrome_profile");
|
|
308
|
+
const result = {
|
|
309
|
+
data_type: "browser_data",
|
|
310
|
+
path: config.dataDir,
|
|
311
|
+
items_deleted: 0,
|
|
312
|
+
size_bytes: 0,
|
|
313
|
+
method: "overwrite",
|
|
314
|
+
verified: false,
|
|
315
|
+
};
|
|
316
|
+
// Erase browser state (encrypted cookies, etc.)
|
|
317
|
+
if (fs.existsSync(browserStateDir)) {
|
|
318
|
+
const browserResult = secureDeleteDirectory(browserStateDir, true);
|
|
319
|
+
result.items_deleted += browserResult.files;
|
|
320
|
+
result.size_bytes += browserResult.bytes;
|
|
321
|
+
}
|
|
322
|
+
// Erase Chrome profile
|
|
323
|
+
if (fs.existsSync(chromeProfileDir)) {
|
|
324
|
+
const chromeResult = secureDeleteDirectory(chromeProfileDir, true);
|
|
325
|
+
result.items_deleted += chromeResult.files;
|
|
326
|
+
result.size_bytes += chromeResult.bytes;
|
|
327
|
+
}
|
|
328
|
+
// Erase session files
|
|
329
|
+
const sessionsDir = path.join(config.dataDir, "sessions");
|
|
330
|
+
if (fs.existsSync(sessionsDir)) {
|
|
331
|
+
const sessionResult = secureDeleteDirectory(sessionsDir, true);
|
|
332
|
+
result.items_deleted += sessionResult.files;
|
|
333
|
+
result.size_bytes += sessionResult.bytes;
|
|
334
|
+
}
|
|
335
|
+
result.verified = !fs.existsSync(browserStateDir) &&
|
|
336
|
+
!fs.existsSync(chromeProfileDir) &&
|
|
337
|
+
!fs.existsSync(sessionsDir);
|
|
338
|
+
return result;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Erase audit logs
|
|
342
|
+
*/
|
|
343
|
+
async eraseAuditLogs(config) {
|
|
344
|
+
const auditDir = path.join(config.dataDir, "audit");
|
|
345
|
+
const result = {
|
|
346
|
+
data_type: "audit_logs",
|
|
347
|
+
path: auditDir,
|
|
348
|
+
items_deleted: 0,
|
|
349
|
+
size_bytes: 0,
|
|
350
|
+
method: "overwrite",
|
|
351
|
+
verified: false,
|
|
352
|
+
};
|
|
353
|
+
if (fs.existsSync(auditDir)) {
|
|
354
|
+
const auditResult = secureDeleteDirectory(auditDir, true);
|
|
355
|
+
result.items_deleted = auditResult.files;
|
|
356
|
+
result.size_bytes = auditResult.bytes;
|
|
357
|
+
result.verified = !fs.existsSync(auditDir);
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
result.verified = true;
|
|
361
|
+
}
|
|
362
|
+
return result;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Erase encryption keys (crypto shred)
|
|
366
|
+
*/
|
|
367
|
+
async eraseEncryptionKeys(config) {
|
|
368
|
+
const keysPath = path.join(config.dataDir, "pq-keys.enc");
|
|
369
|
+
const result = {
|
|
370
|
+
data_type: "encryption_keys",
|
|
371
|
+
path: keysPath,
|
|
372
|
+
items_deleted: 0,
|
|
373
|
+
size_bytes: 0,
|
|
374
|
+
method: "crypto_shred",
|
|
375
|
+
verified: false,
|
|
376
|
+
};
|
|
377
|
+
try {
|
|
378
|
+
if (fs.existsSync(keysPath)) {
|
|
379
|
+
const stats = fs.statSync(keysPath);
|
|
380
|
+
result.size_bytes = stats.size;
|
|
381
|
+
result.items_deleted = 1;
|
|
382
|
+
// Crypto shred: overwrite with random data multiple times
|
|
383
|
+
secureOverwrite(keysPath, 7);
|
|
384
|
+
fs.unlinkSync(keysPath);
|
|
385
|
+
result.verified = !fs.existsSync(keysPath);
|
|
386
|
+
}
|
|
387
|
+
else {
|
|
388
|
+
result.verified = true;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
catch {
|
|
392
|
+
result.verified = false;
|
|
393
|
+
}
|
|
394
|
+
return result;
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Erase consent records
|
|
398
|
+
*/
|
|
399
|
+
async eraseConsentRecords() {
|
|
400
|
+
const consentManager = getConsentManager();
|
|
401
|
+
await consentManager.deleteAllConsents();
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Erase privacy acknowledgments
|
|
405
|
+
*/
|
|
406
|
+
async erasePrivacyAcknowledgments() {
|
|
407
|
+
const privacyManager = getPrivacyNoticeManager();
|
|
408
|
+
await privacyManager.deleteAllRecords();
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Get erasure request by ID
|
|
412
|
+
*/
|
|
413
|
+
async getRequest(requestId) {
|
|
414
|
+
await this.load();
|
|
415
|
+
return this.erasureRequests.find(r => r.request_id === requestId) || null;
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Get all erasure requests
|
|
419
|
+
*/
|
|
420
|
+
async getAllRequests() {
|
|
421
|
+
await this.load();
|
|
422
|
+
return [...this.erasureRequests];
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Get pending erasure requests
|
|
426
|
+
*/
|
|
427
|
+
async getPendingRequests() {
|
|
428
|
+
await this.load();
|
|
429
|
+
return this.erasureRequests.filter(r => !r.confirmed);
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Cancel a pending erasure request
|
|
433
|
+
*/
|
|
434
|
+
async cancelRequest(requestId) {
|
|
435
|
+
await this.load();
|
|
436
|
+
const index = this.erasureRequests.findIndex(r => r.request_id === requestId);
|
|
437
|
+
if (index === -1) {
|
|
438
|
+
return false;
|
|
439
|
+
}
|
|
440
|
+
const request = this.erasureRequests[index];
|
|
441
|
+
if (request.confirmed) {
|
|
442
|
+
return false; // Can't cancel executed requests
|
|
443
|
+
}
|
|
444
|
+
this.erasureRequests.splice(index, 1);
|
|
445
|
+
await this.save();
|
|
446
|
+
// Log cancellation
|
|
447
|
+
const logger = getComplianceLogger();
|
|
448
|
+
await logger.log("data_deletion", "erasure_cancelled", { type: "user" }, "success", {
|
|
449
|
+
details: { request_id: requestId },
|
|
450
|
+
});
|
|
451
|
+
return true;
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Get erasure summary
|
|
455
|
+
*/
|
|
456
|
+
async getSummary() {
|
|
457
|
+
await this.load();
|
|
458
|
+
const completed = this.erasureRequests.filter(r => r.confirmed);
|
|
459
|
+
const pending = this.erasureRequests.filter(r => !r.confirmed);
|
|
460
|
+
const totalItems = completed.reduce((sum, r) => sum + r.items_deleted.reduce((s, i) => s + i.items_deleted, 0), 0);
|
|
461
|
+
const totalBytes = completed.reduce((sum, r) => sum + r.items_deleted.reduce((s, i) => s + i.size_bytes, 0), 0);
|
|
462
|
+
return {
|
|
463
|
+
total_requests: this.erasureRequests.length,
|
|
464
|
+
pending_requests: pending.length,
|
|
465
|
+
completed_requests: completed.length,
|
|
466
|
+
total_items_deleted: totalItems,
|
|
467
|
+
total_bytes_deleted: totalBytes,
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
// ============================================
|
|
472
|
+
// SINGLETON ACCESS
|
|
473
|
+
// ============================================
|
|
474
|
+
/**
|
|
475
|
+
* Get the data erasure manager instance
|
|
476
|
+
*/
|
|
477
|
+
export function getDataErasureManager() {
|
|
478
|
+
return DataErasureManager.getInstance();
|
|
479
|
+
}
|
|
480
|
+
// ============================================
|
|
481
|
+
// CONVENIENCE EXPORTS
|
|
482
|
+
// ============================================
|
|
483
|
+
/**
|
|
484
|
+
* Create a new erasure request
|
|
485
|
+
*/
|
|
486
|
+
export async function createErasureRequest(scope = {}) {
|
|
487
|
+
return getDataErasureManager().createRequest(scope);
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* Confirm and execute an erasure request
|
|
491
|
+
*/
|
|
492
|
+
export async function executeErasureRequest(requestId) {
|
|
493
|
+
return getDataErasureManager().confirmAndExecute(requestId);
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* Get pending erasure requests
|
|
497
|
+
*/
|
|
498
|
+
export async function getPendingErasureRequests() {
|
|
499
|
+
return getDataErasureManager().getPendingRequests();
|
|
500
|
+
}
|
|
501
|
+
//# sourceMappingURL=data-erasure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-erasure.js","sourceRoot":"","sources":["../../src/compliance/data-erasure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data Export Tool
|
|
3
|
+
*
|
|
4
|
+
* Exports all user data in machine-readable format.
|
|
5
|
+
* Implements GDPR Article 20 (Right to Data Portability).
|
|
6
|
+
*
|
|
7
|
+
* Added by Pantheon Security for enterprise compliance support.
|
|
8
|
+
*/
|
|
9
|
+
import type { DataExport, ExportOptions } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Data Exporter class
|
|
12
|
+
*/
|
|
13
|
+
export declare class DataExporter {
|
|
14
|
+
private static instance;
|
|
15
|
+
private constructor();
|
|
16
|
+
/**
|
|
17
|
+
* Get singleton instance
|
|
18
|
+
*/
|
|
19
|
+
static getInstance(): DataExporter;
|
|
20
|
+
/**
|
|
21
|
+
* Export all user data
|
|
22
|
+
*/
|
|
23
|
+
exportAll(options?: Partial<ExportOptions>): Promise<DataExport>;
|
|
24
|
+
/**
|
|
25
|
+
* Export consent records
|
|
26
|
+
*/
|
|
27
|
+
private exportConsents;
|
|
28
|
+
/**
|
|
29
|
+
* Export notebook library
|
|
30
|
+
*/
|
|
31
|
+
private exportNotebooks;
|
|
32
|
+
/**
|
|
33
|
+
* Export user settings
|
|
34
|
+
*/
|
|
35
|
+
private exportSettings;
|
|
36
|
+
/**
|
|
37
|
+
* Export session history (if retained)
|
|
38
|
+
*/
|
|
39
|
+
private exportSessions;
|
|
40
|
+
/**
|
|
41
|
+
* Export audit logs
|
|
42
|
+
*/
|
|
43
|
+
private exportAuditLogs;
|
|
44
|
+
/**
|
|
45
|
+
* Export compliance events
|
|
46
|
+
*/
|
|
47
|
+
private exportComplianceEvents;
|
|
48
|
+
/**
|
|
49
|
+
* Build inventory summary from exported data
|
|
50
|
+
*/
|
|
51
|
+
private buildInventorySummary;
|
|
52
|
+
/**
|
|
53
|
+
* Export to file
|
|
54
|
+
*/
|
|
55
|
+
exportToFile(outputPath: string, options?: Partial<ExportOptions>): Promise<{
|
|
56
|
+
success: boolean;
|
|
57
|
+
path: string;
|
|
58
|
+
checksum: string;
|
|
59
|
+
}>;
|
|
60
|
+
/**
|
|
61
|
+
* Export to string
|
|
62
|
+
*/
|
|
63
|
+
exportToString(options?: Partial<ExportOptions>): Promise<string>;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get the data exporter instance
|
|
67
|
+
*/
|
|
68
|
+
export declare function getDataExporter(): DataExporter;
|
|
69
|
+
/**
|
|
70
|
+
* Export all user data
|
|
71
|
+
*/
|
|
72
|
+
export declare function exportUserData(options?: Partial<ExportOptions>): Promise<DataExport>;
|
|
73
|
+
/**
|
|
74
|
+
* Export user data to file
|
|
75
|
+
*/
|
|
76
|
+
export declare function exportUserDataToFile(outputPath: string, options?: Partial<ExportOptions>): Promise<{
|
|
77
|
+
success: boolean;
|
|
78
|
+
path: string;
|
|
79
|
+
checksum: string;
|
|
80
|
+
}>;
|
|
81
|
+
/**
|
|
82
|
+
* Export user data to string
|
|
83
|
+
*/
|
|
84
|
+
export declare function exportUserDataToString(options?: Partial<ExportOptions>): Promise<string>;
|
|
85
|
+
//# sourceMappingURL=data-export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-export.d.ts","sourceRoot":"","sources":["../../src/compliance/data-export.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAkC,MAAM,YAAY,CAAC;AAsB5F;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IAEtC,OAAO;IAEP;;OAEG;WACW,WAAW,IAAI,YAAY;IAOzC;;OAEG;IACU,SAAS,CAAC,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA8CjF;;OAEG;YACW,cAAc;IAK5B;;OAEG;YACW,eAAe;IAgB7B;;OAEG;YACW,cAAc;IAe5B;;OAEG;YACW,cAAc;IAgC5B;;OAEG;YACW,eAAe;IAsD7B;;OAEG;YACW,sBAAsB;IAyDpC;;OAEG;YACW,qBAAqB;IA6EnC;;OAEG;IACU,YAAY,CACvB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM,GACnC,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAiBhE;;OAEG;IACU,cAAc,CAAC,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAQnF;AAMD;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AAMD;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAE9F;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM,GACnC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAE/D;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAElG"}
|