@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,656 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Evidence Collector
|
|
3
|
+
*
|
|
4
|
+
* Collects and packages evidence for compliance audits.
|
|
5
|
+
* Creates audit-ready evidence packages with integrity verification.
|
|
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 { getDataInventory } from "./data-inventory.js";
|
|
17
|
+
import { getDSARHandler } from "./dsar-handler.js";
|
|
18
|
+
import { getIncidentManager } from "./incident-manager.js";
|
|
19
|
+
import { getChangeLog } from "./change-log.js";
|
|
20
|
+
import { getPolicyDocManager } from "./policy-docs.js";
|
|
21
|
+
import { getReportGenerator } from "./report-generator.js";
|
|
22
|
+
import { getComplianceDashboard } from "./dashboard.js";
|
|
23
|
+
/**
|
|
24
|
+
* Evidence Collector class
|
|
25
|
+
*/
|
|
26
|
+
export class EvidenceCollector {
|
|
27
|
+
static instance;
|
|
28
|
+
evidenceDir;
|
|
29
|
+
constructor() {
|
|
30
|
+
const config = getConfig();
|
|
31
|
+
this.evidenceDir = path.join(config.dataDir, "evidence");
|
|
32
|
+
mkdirSecure(this.evidenceDir);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get singleton instance
|
|
36
|
+
*/
|
|
37
|
+
static getInstance() {
|
|
38
|
+
if (!EvidenceCollector.instance) {
|
|
39
|
+
EvidenceCollector.instance = new EvidenceCollector();
|
|
40
|
+
}
|
|
41
|
+
return EvidenceCollector.instance;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Collect evidence package
|
|
45
|
+
*/
|
|
46
|
+
async collectEvidence(options = {}) {
|
|
47
|
+
const packageId = crypto.randomUUID();
|
|
48
|
+
const from = options.from || new Date(Date.now() - 30 * 24 * 60 * 60 * 1000);
|
|
49
|
+
const to = options.to || new Date();
|
|
50
|
+
const types = options.types || this.getDefaultTypes();
|
|
51
|
+
const regulations = options.regulations || ["GDPR", "SOC2", "CSSF"];
|
|
52
|
+
const purpose = options.purpose || "Compliance Audit";
|
|
53
|
+
const items = [];
|
|
54
|
+
// Collect each type of evidence
|
|
55
|
+
for (const type of types) {
|
|
56
|
+
try {
|
|
57
|
+
const evidence = await this.collectEvidenceType(type, from, to, options.includeRawData);
|
|
58
|
+
if (evidence) {
|
|
59
|
+
items.push(evidence);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
// Log but continue collecting other evidence
|
|
64
|
+
console.error(`Failed to collect ${type} evidence:`, error);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Calculate package checksum
|
|
68
|
+
const packageData = JSON.stringify(items);
|
|
69
|
+
const packageChecksum = crypto.createHash("sha256").update(packageData).digest("hex");
|
|
70
|
+
// Calculate total size
|
|
71
|
+
const totalSize = items.reduce((sum, item) => sum + item.size_bytes, 0);
|
|
72
|
+
const evidencePackage = {
|
|
73
|
+
package_id: packageId,
|
|
74
|
+
created_at: new Date().toISOString(),
|
|
75
|
+
created_by: "evidence-collector",
|
|
76
|
+
purpose,
|
|
77
|
+
period: {
|
|
78
|
+
from: from.toISOString(),
|
|
79
|
+
to: to.toISOString(),
|
|
80
|
+
},
|
|
81
|
+
regulations,
|
|
82
|
+
items,
|
|
83
|
+
manifest: {
|
|
84
|
+
total_items: items.length,
|
|
85
|
+
total_size_bytes: totalSize,
|
|
86
|
+
types_included: items.map(i => i.type),
|
|
87
|
+
package_checksum: packageChecksum,
|
|
88
|
+
},
|
|
89
|
+
chain_of_custody: [
|
|
90
|
+
{
|
|
91
|
+
timestamp: new Date().toISOString(),
|
|
92
|
+
action: "created",
|
|
93
|
+
actor: "evidence-collector",
|
|
94
|
+
details: `Evidence package created for ${purpose}`,
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
};
|
|
98
|
+
return evidencePackage;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get default evidence types
|
|
102
|
+
*/
|
|
103
|
+
getDefaultTypes() {
|
|
104
|
+
return [
|
|
105
|
+
"audit_logs",
|
|
106
|
+
"consent_records",
|
|
107
|
+
"data_inventory",
|
|
108
|
+
"dsar_records",
|
|
109
|
+
"incident_records",
|
|
110
|
+
"change_records",
|
|
111
|
+
"policy_documents",
|
|
112
|
+
"compliance_reports",
|
|
113
|
+
"configuration",
|
|
114
|
+
"integrity_proofs",
|
|
115
|
+
];
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Collect specific evidence type
|
|
119
|
+
*/
|
|
120
|
+
async collectEvidenceType(type, from, to, includeRawData) {
|
|
121
|
+
const id = crypto.randomUUID();
|
|
122
|
+
const collectedAt = new Date().toISOString();
|
|
123
|
+
switch (type) {
|
|
124
|
+
case "audit_logs":
|
|
125
|
+
return this.collectAuditLogs(id, collectedAt, from, to, includeRawData);
|
|
126
|
+
case "consent_records":
|
|
127
|
+
return this.collectConsentRecords(id, collectedAt);
|
|
128
|
+
case "data_inventory":
|
|
129
|
+
return this.collectDataInventory(id, collectedAt);
|
|
130
|
+
case "dsar_records":
|
|
131
|
+
return this.collectDSARRecords(id, collectedAt, from, to);
|
|
132
|
+
case "incident_records":
|
|
133
|
+
return this.collectIncidentRecords(id, collectedAt, from, to);
|
|
134
|
+
case "change_records":
|
|
135
|
+
return this.collectChangeRecords(id, collectedAt, from, to);
|
|
136
|
+
case "policy_documents":
|
|
137
|
+
return this.collectPolicyDocuments(id, collectedAt);
|
|
138
|
+
case "compliance_reports":
|
|
139
|
+
return this.collectComplianceReports(id, collectedAt, from, to);
|
|
140
|
+
case "configuration":
|
|
141
|
+
return this.collectConfiguration(id, collectedAt);
|
|
142
|
+
case "integrity_proofs":
|
|
143
|
+
return this.collectIntegrityProofs(id, collectedAt);
|
|
144
|
+
default:
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Collect audit logs
|
|
150
|
+
*/
|
|
151
|
+
async collectAuditLogs(id, collectedAt, from, to, includeRawData) {
|
|
152
|
+
const logger = getComplianceLogger();
|
|
153
|
+
const stats = await logger.getStats();
|
|
154
|
+
const events = await logger.getEvents(undefined, from, to, 10000);
|
|
155
|
+
const integrity = await logger.verifyIntegrity();
|
|
156
|
+
const data = {
|
|
157
|
+
statistics: stats,
|
|
158
|
+
integrity_verification: integrity,
|
|
159
|
+
events_count: events.length,
|
|
160
|
+
events: includeRawData ? events : events.slice(0, 100), // Sample if not including all
|
|
161
|
+
sample_note: includeRawData ? undefined : "Limited to first 100 events. Set includeRawData=true for full data.",
|
|
162
|
+
};
|
|
163
|
+
const dataStr = JSON.stringify(data);
|
|
164
|
+
return {
|
|
165
|
+
id,
|
|
166
|
+
type: "audit_logs",
|
|
167
|
+
title: "Compliance Audit Logs",
|
|
168
|
+
description: "Hash-chained audit log entries with integrity verification",
|
|
169
|
+
collected_at: collectedAt,
|
|
170
|
+
source: "compliance-logger",
|
|
171
|
+
checksum: crypto.createHash("sha256").update(dataStr).digest("hex"),
|
|
172
|
+
size_bytes: Buffer.byteLength(dataStr),
|
|
173
|
+
data,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Collect consent records
|
|
178
|
+
*/
|
|
179
|
+
async collectConsentRecords(id, collectedAt) {
|
|
180
|
+
const consentManager = getConsentManager();
|
|
181
|
+
const consents = await consentManager.getActiveConsents();
|
|
182
|
+
const validation = await consentManager.validateConsents();
|
|
183
|
+
const data = {
|
|
184
|
+
total_consents: consents.length,
|
|
185
|
+
validation_result: validation,
|
|
186
|
+
consents: consents.map((c) => ({
|
|
187
|
+
purpose: c.purposes.join(", "),
|
|
188
|
+
legal_basis: c.legal_basis,
|
|
189
|
+
granted_at: c.granted_at,
|
|
190
|
+
expires_at: c.expires_at,
|
|
191
|
+
is_valid: c.is_valid,
|
|
192
|
+
revoked: c.revoked,
|
|
193
|
+
})),
|
|
194
|
+
};
|
|
195
|
+
const dataStr = JSON.stringify(data);
|
|
196
|
+
return {
|
|
197
|
+
id,
|
|
198
|
+
type: "consent_records",
|
|
199
|
+
title: "GDPR Consent Records",
|
|
200
|
+
description: "Records of data processing consent with legal basis",
|
|
201
|
+
collected_at: collectedAt,
|
|
202
|
+
source: "consent-manager",
|
|
203
|
+
checksum: crypto.createHash("sha256").update(dataStr).digest("hex"),
|
|
204
|
+
size_bytes: Buffer.byteLength(dataStr),
|
|
205
|
+
data,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Collect data inventory
|
|
210
|
+
*/
|
|
211
|
+
async collectDataInventory(id, collectedAt) {
|
|
212
|
+
const inventory = getDataInventory();
|
|
213
|
+
const items = await inventory.getAll();
|
|
214
|
+
const exportable = await inventory.getExportable();
|
|
215
|
+
const erasable = await inventory.getErasable();
|
|
216
|
+
const data = {
|
|
217
|
+
total_categories: items.length,
|
|
218
|
+
exportable_categories: exportable.length,
|
|
219
|
+
erasable_categories: erasable.length,
|
|
220
|
+
inventory: items,
|
|
221
|
+
};
|
|
222
|
+
const dataStr = JSON.stringify(data);
|
|
223
|
+
return {
|
|
224
|
+
id,
|
|
225
|
+
type: "data_inventory",
|
|
226
|
+
title: "GDPR Article 30 Data Inventory",
|
|
227
|
+
description: "Records of processing activities",
|
|
228
|
+
collected_at: collectedAt,
|
|
229
|
+
source: "data-inventory",
|
|
230
|
+
checksum: crypto.createHash("sha256").update(dataStr).digest("hex"),
|
|
231
|
+
size_bytes: Buffer.byteLength(dataStr),
|
|
232
|
+
data,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Collect DSAR records
|
|
237
|
+
*/
|
|
238
|
+
async collectDSARRecords(id, collectedAt, from, to) {
|
|
239
|
+
const dsarHandler = getDSARHandler();
|
|
240
|
+
const summary = await dsarHandler.getStatistics();
|
|
241
|
+
const requests = await dsarHandler.getAllRequests();
|
|
242
|
+
// Filter requests by date range
|
|
243
|
+
const filteredRequests = requests.filter((r) => {
|
|
244
|
+
const date = new Date(r.submitted_at);
|
|
245
|
+
return date >= from && date <= to;
|
|
246
|
+
});
|
|
247
|
+
const data = {
|
|
248
|
+
summary,
|
|
249
|
+
requests: filteredRequests.map((r) => ({
|
|
250
|
+
id: r.request_id,
|
|
251
|
+
type: r.type,
|
|
252
|
+
status: r.status,
|
|
253
|
+
submitted_at: r.submitted_at,
|
|
254
|
+
completed_at: r.completed_at,
|
|
255
|
+
})),
|
|
256
|
+
};
|
|
257
|
+
const dataStr = JSON.stringify(data);
|
|
258
|
+
return {
|
|
259
|
+
id,
|
|
260
|
+
type: "dsar_records",
|
|
261
|
+
title: "Data Subject Access Requests",
|
|
262
|
+
description: "DSAR processing records and response times",
|
|
263
|
+
collected_at: collectedAt,
|
|
264
|
+
source: "dsar-handler",
|
|
265
|
+
checksum: crypto.createHash("sha256").update(dataStr).digest("hex"),
|
|
266
|
+
size_bytes: Buffer.byteLength(dataStr),
|
|
267
|
+
data,
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Collect incident records
|
|
272
|
+
*/
|
|
273
|
+
async collectIncidentRecords(id, collectedAt, from, to) {
|
|
274
|
+
const incidentManager = getIncidentManager();
|
|
275
|
+
const statistics = await incidentManager.getStatistics();
|
|
276
|
+
const allIncidents = await incidentManager.getAllIncidents();
|
|
277
|
+
// Filter incidents by date range
|
|
278
|
+
const incidents = allIncidents.filter((i) => {
|
|
279
|
+
const date = new Date(i.detected_at);
|
|
280
|
+
return date >= from && date <= to;
|
|
281
|
+
});
|
|
282
|
+
const data = {
|
|
283
|
+
statistics,
|
|
284
|
+
incidents: incidents.map((i) => ({
|
|
285
|
+
id: i.id,
|
|
286
|
+
type: i.type,
|
|
287
|
+
severity: i.severity,
|
|
288
|
+
title: i.title,
|
|
289
|
+
status: i.status,
|
|
290
|
+
detected_at: i.detected_at,
|
|
291
|
+
resolved_at: i.resolved_at,
|
|
292
|
+
actions_taken: i.actions_taken.length,
|
|
293
|
+
})),
|
|
294
|
+
};
|
|
295
|
+
const dataStr = JSON.stringify(data);
|
|
296
|
+
return {
|
|
297
|
+
id,
|
|
298
|
+
type: "incident_records",
|
|
299
|
+
title: "Security Incident Records",
|
|
300
|
+
description: "Security incident tracking and response records",
|
|
301
|
+
collected_at: collectedAt,
|
|
302
|
+
source: "incident-manager",
|
|
303
|
+
checksum: crypto.createHash("sha256").update(dataStr).digest("hex"),
|
|
304
|
+
size_bytes: Buffer.byteLength(dataStr),
|
|
305
|
+
data,
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Collect change records
|
|
310
|
+
*/
|
|
311
|
+
async collectChangeRecords(id, collectedAt, from, to) {
|
|
312
|
+
const changeLog = getChangeLog();
|
|
313
|
+
const statistics = await changeLog.getStatistics(from, to);
|
|
314
|
+
const changes = await changeLog.getChangesInRange(from, to, 1000);
|
|
315
|
+
const data = {
|
|
316
|
+
statistics,
|
|
317
|
+
changes: changes.map(c => ({
|
|
318
|
+
id: c.id,
|
|
319
|
+
timestamp: c.timestamp,
|
|
320
|
+
component: c.component,
|
|
321
|
+
setting: c.setting,
|
|
322
|
+
changed_by: c.changed_by,
|
|
323
|
+
method: c.method,
|
|
324
|
+
impact: c.impact,
|
|
325
|
+
requires_approval: c.requires_approval,
|
|
326
|
+
approved_by: c.approved_by,
|
|
327
|
+
})),
|
|
328
|
+
};
|
|
329
|
+
const dataStr = JSON.stringify(data);
|
|
330
|
+
return {
|
|
331
|
+
id,
|
|
332
|
+
type: "change_records",
|
|
333
|
+
title: "Configuration Change Records",
|
|
334
|
+
description: "SOC2 change management audit trail",
|
|
335
|
+
collected_at: collectedAt,
|
|
336
|
+
source: "change-log",
|
|
337
|
+
checksum: crypto.createHash("sha256").update(dataStr).digest("hex"),
|
|
338
|
+
size_bytes: Buffer.byteLength(dataStr),
|
|
339
|
+
data,
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Collect policy documents
|
|
344
|
+
*/
|
|
345
|
+
async collectPolicyDocuments(id, collectedAt) {
|
|
346
|
+
const policyManager = getPolicyDocManager();
|
|
347
|
+
const policies = await policyManager.getAllPolicies();
|
|
348
|
+
const summary = await policyManager.getPolicySummary();
|
|
349
|
+
const data = {
|
|
350
|
+
summary,
|
|
351
|
+
policies: policies.map(p => ({
|
|
352
|
+
id: p.id,
|
|
353
|
+
type: p.type,
|
|
354
|
+
title: p.title,
|
|
355
|
+
version: p.version,
|
|
356
|
+
effective_date: p.effective_date,
|
|
357
|
+
regulations: p.regulations,
|
|
358
|
+
enforced: p.enforced,
|
|
359
|
+
last_reviewed: p.last_reviewed,
|
|
360
|
+
next_review: p.next_review,
|
|
361
|
+
approved_by: p.approved_by,
|
|
362
|
+
})),
|
|
363
|
+
};
|
|
364
|
+
const dataStr = JSON.stringify(data);
|
|
365
|
+
return {
|
|
366
|
+
id,
|
|
367
|
+
type: "policy_documents",
|
|
368
|
+
title: "Compliance Policy Documents",
|
|
369
|
+
description: "Documented security and privacy policies",
|
|
370
|
+
collected_at: collectedAt,
|
|
371
|
+
source: "policy-docs",
|
|
372
|
+
checksum: crypto.createHash("sha256").update(dataStr).digest("hex"),
|
|
373
|
+
size_bytes: Buffer.byteLength(dataStr),
|
|
374
|
+
data,
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Collect compliance reports
|
|
379
|
+
*/
|
|
380
|
+
async collectComplianceReports(id, collectedAt, from, to) {
|
|
381
|
+
const reportGenerator = getReportGenerator();
|
|
382
|
+
const dashboard = getComplianceDashboard();
|
|
383
|
+
const dashboardData = await dashboard.generateDashboard();
|
|
384
|
+
const score = await dashboard.getComplianceScore();
|
|
385
|
+
const existingReports = reportGenerator.listGeneratedReports();
|
|
386
|
+
const data = {
|
|
387
|
+
current_dashboard: dashboardData,
|
|
388
|
+
compliance_score: score,
|
|
389
|
+
generated_reports: existingReports.filter(r => {
|
|
390
|
+
const reportDate = new Date(r.generated);
|
|
391
|
+
return reportDate >= from && reportDate <= to;
|
|
392
|
+
}),
|
|
393
|
+
};
|
|
394
|
+
const dataStr = JSON.stringify(data);
|
|
395
|
+
return {
|
|
396
|
+
id,
|
|
397
|
+
type: "compliance_reports",
|
|
398
|
+
title: "Compliance Reports and Dashboards",
|
|
399
|
+
description: "Generated compliance reports and current status",
|
|
400
|
+
collected_at: collectedAt,
|
|
401
|
+
source: "report-generator",
|
|
402
|
+
checksum: crypto.createHash("sha256").update(dataStr).digest("hex"),
|
|
403
|
+
size_bytes: Buffer.byteLength(dataStr),
|
|
404
|
+
data,
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Collect configuration evidence
|
|
409
|
+
*/
|
|
410
|
+
async collectConfiguration(id, collectedAt) {
|
|
411
|
+
const config = getConfig();
|
|
412
|
+
// Collect non-sensitive configuration
|
|
413
|
+
const data = {
|
|
414
|
+
environment: {
|
|
415
|
+
node_version: process.version,
|
|
416
|
+
platform: process.platform,
|
|
417
|
+
arch: process.arch,
|
|
418
|
+
},
|
|
419
|
+
security_settings: {
|
|
420
|
+
encryption_enabled: process.env.NLMCP_ENCRYPTION_ENABLED !== "false",
|
|
421
|
+
auth_enabled: process.env.NLMCP_AUTH_ENABLED === "true",
|
|
422
|
+
cert_pinning_enabled: process.env.NLMCP_CERT_PINNING !== "false",
|
|
423
|
+
audit_enabled: process.env.NLMCP_AUDIT_ENABLED !== "false",
|
|
424
|
+
compliance_logging_enabled: process.env.NLMCP_COMPLIANCE_LOGGING !== "false",
|
|
425
|
+
},
|
|
426
|
+
data_directories: {
|
|
427
|
+
config_dir_exists: fs.existsSync(config.configDir),
|
|
428
|
+
data_dir_exists: fs.existsSync(config.dataDir),
|
|
429
|
+
},
|
|
430
|
+
compliance_features: {
|
|
431
|
+
gdpr_enabled: true,
|
|
432
|
+
soc2_enabled: true,
|
|
433
|
+
cssf_enabled: true,
|
|
434
|
+
siem_enabled: process.env.NLMCP_SIEM_ENABLED === "true",
|
|
435
|
+
health_monitoring_enabled: process.env.NLMCP_HEALTH_MONITORING !== "false",
|
|
436
|
+
},
|
|
437
|
+
};
|
|
438
|
+
const dataStr = JSON.stringify(data);
|
|
439
|
+
return {
|
|
440
|
+
id,
|
|
441
|
+
type: "configuration",
|
|
442
|
+
title: "System Configuration",
|
|
443
|
+
description: "Security and compliance configuration settings",
|
|
444
|
+
collected_at: collectedAt,
|
|
445
|
+
source: "system-config",
|
|
446
|
+
checksum: crypto.createHash("sha256").update(dataStr).digest("hex"),
|
|
447
|
+
size_bytes: Buffer.byteLength(dataStr),
|
|
448
|
+
data,
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Collect integrity proofs
|
|
453
|
+
*/
|
|
454
|
+
async collectIntegrityProofs(id, collectedAt) {
|
|
455
|
+
const logger = getComplianceLogger();
|
|
456
|
+
const integrity = await logger.verifyIntegrity();
|
|
457
|
+
const data = {
|
|
458
|
+
audit_log_integrity: integrity,
|
|
459
|
+
verification_timestamp: collectedAt,
|
|
460
|
+
verification_method: "SHA-256 hash chain verification",
|
|
461
|
+
tamper_evident: true,
|
|
462
|
+
};
|
|
463
|
+
const dataStr = JSON.stringify(data);
|
|
464
|
+
return {
|
|
465
|
+
id,
|
|
466
|
+
type: "integrity_proofs",
|
|
467
|
+
title: "Integrity Verification Proofs",
|
|
468
|
+
description: "Cryptographic proofs of audit log integrity",
|
|
469
|
+
collected_at: collectedAt,
|
|
470
|
+
source: "integrity-verifier",
|
|
471
|
+
checksum: crypto.createHash("sha256").update(dataStr).digest("hex"),
|
|
472
|
+
size_bytes: Buffer.byteLength(dataStr),
|
|
473
|
+
data,
|
|
474
|
+
};
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Save evidence package to disk
|
|
478
|
+
*/
|
|
479
|
+
async savePackage(evidencePackage, outputDir) {
|
|
480
|
+
const dir = outputDir || this.evidenceDir;
|
|
481
|
+
mkdirSecure(dir);
|
|
482
|
+
const fileName = `evidence-${evidencePackage.package_id}.json`;
|
|
483
|
+
const filePath = path.join(dir, fileName);
|
|
484
|
+
// Add chain of custody entry
|
|
485
|
+
evidencePackage.chain_of_custody.push({
|
|
486
|
+
timestamp: new Date().toISOString(),
|
|
487
|
+
action: "saved_to_disk",
|
|
488
|
+
actor: "evidence-collector",
|
|
489
|
+
details: `Saved to ${filePath}`,
|
|
490
|
+
});
|
|
491
|
+
writeFileSecure(filePath, JSON.stringify(evidencePackage, null, 2));
|
|
492
|
+
return filePath;
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* Load evidence package from disk
|
|
496
|
+
*/
|
|
497
|
+
async loadPackage(packageId) {
|
|
498
|
+
const fileName = `evidence-${packageId}.json`;
|
|
499
|
+
const filePath = path.join(this.evidenceDir, fileName);
|
|
500
|
+
if (!fs.existsSync(filePath)) {
|
|
501
|
+
return null;
|
|
502
|
+
}
|
|
503
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
504
|
+
const evidencePackage = JSON.parse(content);
|
|
505
|
+
// Add chain of custody entry
|
|
506
|
+
evidencePackage.chain_of_custody.push({
|
|
507
|
+
timestamp: new Date().toISOString(),
|
|
508
|
+
action: "loaded_from_disk",
|
|
509
|
+
actor: "evidence-collector",
|
|
510
|
+
});
|
|
511
|
+
return evidencePackage;
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Verify evidence package integrity
|
|
515
|
+
*/
|
|
516
|
+
verifyPackageIntegrity(evidencePackage) {
|
|
517
|
+
const errors = [];
|
|
518
|
+
// Verify each item checksum
|
|
519
|
+
for (const item of evidencePackage.items) {
|
|
520
|
+
const dataStr = JSON.stringify(item.data);
|
|
521
|
+
const calculatedChecksum = crypto.createHash("sha256").update(dataStr).digest("hex");
|
|
522
|
+
if (calculatedChecksum !== item.checksum) {
|
|
523
|
+
errors.push(`Item ${item.id} (${item.type}): checksum mismatch`);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
// Verify package checksum
|
|
527
|
+
const packageData = JSON.stringify(evidencePackage.items);
|
|
528
|
+
const calculatedPackageChecksum = crypto.createHash("sha256").update(packageData).digest("hex");
|
|
529
|
+
if (calculatedPackageChecksum !== evidencePackage.manifest.package_checksum) {
|
|
530
|
+
errors.push("Package manifest: checksum mismatch");
|
|
531
|
+
}
|
|
532
|
+
return {
|
|
533
|
+
valid: errors.length === 0,
|
|
534
|
+
errors,
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
/**
|
|
538
|
+
* List saved evidence packages
|
|
539
|
+
*/
|
|
540
|
+
listPackages() {
|
|
541
|
+
const packages = [];
|
|
542
|
+
try {
|
|
543
|
+
const files = fs.readdirSync(this.evidenceDir).filter(f => f.startsWith("evidence-") && f.endsWith(".json"));
|
|
544
|
+
for (const file of files) {
|
|
545
|
+
try {
|
|
546
|
+
const filePath = path.join(this.evidenceDir, file);
|
|
547
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
548
|
+
const pkg = JSON.parse(content);
|
|
549
|
+
packages.push({
|
|
550
|
+
package_id: pkg.package_id,
|
|
551
|
+
created_at: pkg.created_at,
|
|
552
|
+
purpose: pkg.purpose,
|
|
553
|
+
item_count: pkg.manifest.total_items,
|
|
554
|
+
});
|
|
555
|
+
}
|
|
556
|
+
catch {
|
|
557
|
+
// Skip malformed packages
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
catch {
|
|
562
|
+
// Ignore errors
|
|
563
|
+
}
|
|
564
|
+
return packages.sort((a, b) => b.created_at.localeCompare(a.created_at));
|
|
565
|
+
}
|
|
566
|
+
/**
|
|
567
|
+
* Create evidence package for specific regulation
|
|
568
|
+
*/
|
|
569
|
+
async collectRegulationEvidence(regulation, options = {}) {
|
|
570
|
+
let types;
|
|
571
|
+
switch (regulation) {
|
|
572
|
+
case "GDPR":
|
|
573
|
+
types = [
|
|
574
|
+
"consent_records",
|
|
575
|
+
"data_inventory",
|
|
576
|
+
"dsar_records",
|
|
577
|
+
"policy_documents",
|
|
578
|
+
"audit_logs",
|
|
579
|
+
"integrity_proofs",
|
|
580
|
+
];
|
|
581
|
+
break;
|
|
582
|
+
case "SOC2":
|
|
583
|
+
types = [
|
|
584
|
+
"audit_logs",
|
|
585
|
+
"change_records",
|
|
586
|
+
"incident_records",
|
|
587
|
+
"policy_documents",
|
|
588
|
+
"configuration",
|
|
589
|
+
"integrity_proofs",
|
|
590
|
+
];
|
|
591
|
+
break;
|
|
592
|
+
case "CSSF":
|
|
593
|
+
types = [
|
|
594
|
+
"audit_logs",
|
|
595
|
+
"incident_records",
|
|
596
|
+
"policy_documents",
|
|
597
|
+
"change_records",
|
|
598
|
+
"compliance_reports",
|
|
599
|
+
"integrity_proofs",
|
|
600
|
+
];
|
|
601
|
+
break;
|
|
602
|
+
}
|
|
603
|
+
return this.collectEvidence({
|
|
604
|
+
...options,
|
|
605
|
+
types,
|
|
606
|
+
regulations: [regulation],
|
|
607
|
+
purpose: `${regulation} Compliance Audit`,
|
|
608
|
+
});
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
// ============================================
|
|
612
|
+
// SINGLETON ACCESS
|
|
613
|
+
// ============================================
|
|
614
|
+
/**
|
|
615
|
+
* Get the evidence collector instance
|
|
616
|
+
*/
|
|
617
|
+
export function getEvidenceCollector() {
|
|
618
|
+
return EvidenceCollector.getInstance();
|
|
619
|
+
}
|
|
620
|
+
// ============================================
|
|
621
|
+
// CONVENIENCE EXPORTS
|
|
622
|
+
// ============================================
|
|
623
|
+
/**
|
|
624
|
+
* Collect evidence package
|
|
625
|
+
*/
|
|
626
|
+
export async function collectEvidence(options) {
|
|
627
|
+
return getEvidenceCollector().collectEvidence(options);
|
|
628
|
+
}
|
|
629
|
+
/**
|
|
630
|
+
* Collect and save evidence package
|
|
631
|
+
*/
|
|
632
|
+
export async function collectAndSaveEvidence(options) {
|
|
633
|
+
const collector = getEvidenceCollector();
|
|
634
|
+
const pkg = await collector.collectEvidence(options);
|
|
635
|
+
const filePath = await collector.savePackage(pkg);
|
|
636
|
+
return { package: pkg, filePath };
|
|
637
|
+
}
|
|
638
|
+
/**
|
|
639
|
+
* Collect regulation-specific evidence
|
|
640
|
+
*/
|
|
641
|
+
export async function collectRegulationEvidence(regulation, options) {
|
|
642
|
+
return getEvidenceCollector().collectRegulationEvidence(regulation, options);
|
|
643
|
+
}
|
|
644
|
+
/**
|
|
645
|
+
* Verify evidence package integrity
|
|
646
|
+
*/
|
|
647
|
+
export function verifyEvidence(evidencePackage) {
|
|
648
|
+
return getEvidenceCollector().verifyPackageIntegrity(evidencePackage);
|
|
649
|
+
}
|
|
650
|
+
/**
|
|
651
|
+
* List saved evidence packages
|
|
652
|
+
*/
|
|
653
|
+
export function listEvidencePackages() {
|
|
654
|
+
return getEvidenceCollector().listPackages();
|
|
655
|
+
}
|
|
656
|
+
//# sourceMappingURL=evidence-collector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence-collector.js","sourceRoot":"","sources":["../../src/compliance/evidence-collector.ts"],"names":[],"mappings":"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"}
|