@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.
Files changed (230) hide show
  1. package/README.md +61 -7
  2. package/SECURITY.md +40 -6
  3. package/dist/auth/mcp-auth.d.ts.map +1 -1
  4. package/dist/auth/mcp-auth.js +3 -6
  5. package/dist/auth/mcp-auth.js.map +1 -1
  6. package/dist/compliance/alert-manager.d.ts +120 -0
  7. package/dist/compliance/alert-manager.d.ts.map +1 -0
  8. package/dist/compliance/alert-manager.js +420 -0
  9. package/dist/compliance/alert-manager.js.map +1 -0
  10. package/dist/compliance/breach-detection.d.ts +134 -0
  11. package/dist/compliance/breach-detection.d.ts.map +1 -0
  12. package/dist/compliance/breach-detection.js +456 -0
  13. package/dist/compliance/breach-detection.js.map +1 -0
  14. package/dist/compliance/change-log.d.ts +113 -0
  15. package/dist/compliance/change-log.d.ts.map +1 -0
  16. package/dist/compliance/change-log.js +275 -0
  17. package/dist/compliance/change-log.js.map +1 -0
  18. package/dist/compliance/compliance-logger.d.ts +136 -0
  19. package/dist/compliance/compliance-logger.d.ts.map +1 -0
  20. package/dist/compliance/compliance-logger.js +425 -0
  21. package/dist/compliance/compliance-logger.js.map +1 -0
  22. package/dist/compliance/compliance-tools.d.ts +18 -0
  23. package/dist/compliance/compliance-tools.d.ts.map +1 -0
  24. package/dist/compliance/compliance-tools.js +673 -0
  25. package/dist/compliance/compliance-tools.js.map +1 -0
  26. package/dist/compliance/consent-manager.d.ts +130 -0
  27. package/dist/compliance/consent-manager.d.ts.map +1 -0
  28. package/dist/compliance/consent-manager.js +386 -0
  29. package/dist/compliance/consent-manager.js.map +1 -0
  30. package/dist/compliance/dashboard.d.ts +243 -0
  31. package/dist/compliance/dashboard.d.ts.map +1 -0
  32. package/dist/compliance/dashboard.js +519 -0
  33. package/dist/compliance/dashboard.js.map +1 -0
  34. package/dist/compliance/data-classification.d.ts +117 -0
  35. package/dist/compliance/data-classification.d.ts.map +1 -0
  36. package/dist/compliance/data-classification.js +469 -0
  37. package/dist/compliance/data-classification.js.map +1 -0
  38. package/dist/compliance/data-erasure.d.ts +110 -0
  39. package/dist/compliance/data-erasure.d.ts.map +1 -0
  40. package/dist/compliance/data-erasure.js +501 -0
  41. package/dist/compliance/data-erasure.js.map +1 -0
  42. package/dist/compliance/data-export.d.ts +85 -0
  43. package/dist/compliance/data-export.d.ts.map +1 -0
  44. package/dist/compliance/data-export.js +394 -0
  45. package/dist/compliance/data-export.js.map +1 -0
  46. package/dist/compliance/data-inventory.d.ts +136 -0
  47. package/dist/compliance/data-inventory.d.ts.map +1 -0
  48. package/dist/compliance/data-inventory.js +335 -0
  49. package/dist/compliance/data-inventory.js.map +1 -0
  50. package/dist/compliance/dsar-handler.d.ts +123 -0
  51. package/dist/compliance/dsar-handler.d.ts.map +1 -0
  52. package/dist/compliance/dsar-handler.js +371 -0
  53. package/dist/compliance/dsar-handler.js.map +1 -0
  54. package/dist/compliance/evidence-collector.d.ts +187 -0
  55. package/dist/compliance/evidence-collector.d.ts.map +1 -0
  56. package/dist/compliance/evidence-collector.js +656 -0
  57. package/dist/compliance/evidence-collector.js.map +1 -0
  58. package/dist/compliance/health-monitor.d.ts +111 -0
  59. package/dist/compliance/health-monitor.d.ts.map +1 -0
  60. package/dist/compliance/health-monitor.js +509 -0
  61. package/dist/compliance/health-monitor.js.map +1 -0
  62. package/dist/compliance/incident-manager.d.ts +131 -0
  63. package/dist/compliance/incident-manager.d.ts.map +1 -0
  64. package/dist/compliance/incident-manager.js +418 -0
  65. package/dist/compliance/incident-manager.js.map +1 -0
  66. package/dist/compliance/index.d.ts +32 -0
  67. package/dist/compliance/index.d.ts.map +1 -0
  68. package/dist/compliance/index.js +35 -0
  69. package/dist/compliance/index.js.map +1 -0
  70. package/dist/compliance/policy-docs.d.ts +108 -0
  71. package/dist/compliance/policy-docs.d.ts.map +1 -0
  72. package/dist/compliance/policy-docs.js +464 -0
  73. package/dist/compliance/policy-docs.js.map +1 -0
  74. package/dist/compliance/privacy-notice-text.d.ts +58 -0
  75. package/dist/compliance/privacy-notice-text.d.ts.map +1 -0
  76. package/dist/compliance/privacy-notice-text.js +161 -0
  77. package/dist/compliance/privacy-notice-text.js.map +1 -0
  78. package/dist/compliance/privacy-notice.d.ts +128 -0
  79. package/dist/compliance/privacy-notice.d.ts.map +1 -0
  80. package/dist/compliance/privacy-notice.js +250 -0
  81. package/dist/compliance/privacy-notice.js.map +1 -0
  82. package/dist/compliance/report-generator.d.ts +168 -0
  83. package/dist/compliance/report-generator.d.ts.map +1 -0
  84. package/dist/compliance/report-generator.js +830 -0
  85. package/dist/compliance/report-generator.js.map +1 -0
  86. package/dist/compliance/retention-engine.d.ts +130 -0
  87. package/dist/compliance/retention-engine.d.ts.map +1 -0
  88. package/dist/compliance/retention-engine.js +510 -0
  89. package/dist/compliance/retention-engine.js.map +1 -0
  90. package/dist/compliance/siem-exporter.d.ts +150 -0
  91. package/dist/compliance/siem-exporter.d.ts.map +1 -0
  92. package/dist/compliance/siem-exporter.js +509 -0
  93. package/dist/compliance/siem-exporter.js.map +1 -0
  94. package/dist/compliance/types.d.ts +601 -0
  95. package/dist/compliance/types.d.ts.map +1 -0
  96. package/dist/compliance/types.js +22 -0
  97. package/dist/compliance/types.js.map +1 -0
  98. package/dist/config.d.ts +4 -0
  99. package/dist/config.d.ts.map +1 -1
  100. package/dist/config.js +8 -1
  101. package/dist/config.js.map +1 -1
  102. package/dist/events/event-emitter.d.ts +45 -0
  103. package/dist/events/event-emitter.d.ts.map +1 -0
  104. package/dist/events/event-emitter.js +100 -0
  105. package/dist/events/event-emitter.js.map +1 -0
  106. package/dist/events/event-types.d.ts +124 -0
  107. package/dist/events/event-types.d.ts.map +1 -0
  108. package/dist/events/event-types.js +18 -0
  109. package/dist/events/event-types.js.map +1 -0
  110. package/dist/index.js +59 -2
  111. package/dist/index.js.map +1 -1
  112. package/dist/library/notebook-library.d.ts +25 -2
  113. package/dist/library/notebook-library.d.ts.map +1 -1
  114. package/dist/library/notebook-library.js +144 -3
  115. package/dist/library/notebook-library.js.map +1 -1
  116. package/dist/library/types.d.ts +15 -0
  117. package/dist/library/types.d.ts.map +1 -1
  118. package/dist/notebook-creation/audio-manager.d.ts +56 -0
  119. package/dist/notebook-creation/audio-manager.d.ts.map +1 -0
  120. package/dist/notebook-creation/audio-manager.js +335 -0
  121. package/dist/notebook-creation/audio-manager.js.map +1 -0
  122. package/dist/notebook-creation/discover-creation-flow.d.ts +8 -0
  123. package/dist/notebook-creation/discover-creation-flow.d.ts.map +1 -0
  124. package/dist/notebook-creation/discover-creation-flow.js +177 -0
  125. package/dist/notebook-creation/discover-creation-flow.js.map +1 -0
  126. package/dist/notebook-creation/discover-quota.d.ts +8 -0
  127. package/dist/notebook-creation/discover-quota.d.ts.map +1 -0
  128. package/dist/notebook-creation/discover-quota.js +195 -0
  129. package/dist/notebook-creation/discover-quota.js.map +1 -0
  130. package/dist/notebook-creation/discover-source-dialog.d.ts +8 -0
  131. package/dist/notebook-creation/discover-source-dialog.d.ts.map +1 -0
  132. package/dist/notebook-creation/discover-source-dialog.js +134 -0
  133. package/dist/notebook-creation/discover-source-dialog.js.map +1 -0
  134. package/dist/notebook-creation/discover-sources.d.ts +8 -0
  135. package/dist/notebook-creation/discover-sources.d.ts.map +1 -0
  136. package/dist/notebook-creation/discover-sources.js +273 -0
  137. package/dist/notebook-creation/discover-sources.js.map +1 -0
  138. package/dist/notebook-creation/discover-text-input.d.ts +7 -0
  139. package/dist/notebook-creation/discover-text-input.d.ts.map +1 -0
  140. package/dist/notebook-creation/discover-text-input.js +135 -0
  141. package/dist/notebook-creation/discover-text-input.js.map +1 -0
  142. package/dist/notebook-creation/index.d.ts +12 -0
  143. package/dist/notebook-creation/index.d.ts.map +1 -0
  144. package/dist/notebook-creation/index.js +12 -0
  145. package/dist/notebook-creation/index.js.map +1 -0
  146. package/dist/notebook-creation/notebook-creator.d.ts +95 -0
  147. package/dist/notebook-creation/notebook-creator.d.ts.map +1 -0
  148. package/dist/notebook-creation/notebook-creator.js +689 -0
  149. package/dist/notebook-creation/notebook-creator.js.map +1 -0
  150. package/dist/notebook-creation/notebook-sync.d.ts +93 -0
  151. package/dist/notebook-creation/notebook-sync.d.ts.map +1 -0
  152. package/dist/notebook-creation/notebook-sync.js +370 -0
  153. package/dist/notebook-creation/notebook-sync.js.map +1 -0
  154. package/dist/notebook-creation/run-discovery.d.ts +11 -0
  155. package/dist/notebook-creation/run-discovery.d.ts.map +1 -0
  156. package/dist/notebook-creation/run-discovery.js +151 -0
  157. package/dist/notebook-creation/run-discovery.js.map +1 -0
  158. package/dist/notebook-creation/selector-discovery.d.ts +65 -0
  159. package/dist/notebook-creation/selector-discovery.d.ts.map +1 -0
  160. package/dist/notebook-creation/selector-discovery.js +421 -0
  161. package/dist/notebook-creation/selector-discovery.js.map +1 -0
  162. package/dist/notebook-creation/selectors.d.ts +150 -0
  163. package/dist/notebook-creation/selectors.d.ts.map +1 -0
  164. package/dist/notebook-creation/selectors.js +225 -0
  165. package/dist/notebook-creation/selectors.js.map +1 -0
  166. package/dist/notebook-creation/source-manager.d.ts +73 -0
  167. package/dist/notebook-creation/source-manager.d.ts.map +1 -0
  168. package/dist/notebook-creation/source-manager.js +486 -0
  169. package/dist/notebook-creation/source-manager.js.map +1 -0
  170. package/dist/notebook-creation/test-create.d.ts +8 -0
  171. package/dist/notebook-creation/test-create.d.ts.map +1 -0
  172. package/dist/notebook-creation/test-create.js +72 -0
  173. package/dist/notebook-creation/test-create.js.map +1 -0
  174. package/dist/notebook-creation/types.d.ts +173 -0
  175. package/dist/notebook-creation/types.d.ts.map +1 -0
  176. package/dist/notebook-creation/types.js +5 -0
  177. package/dist/notebook-creation/types.js.map +1 -0
  178. package/dist/quota/index.d.ts +8 -0
  179. package/dist/quota/index.d.ts.map +1 -0
  180. package/dist/quota/index.js +8 -0
  181. package/dist/quota/index.js.map +1 -0
  182. package/dist/quota/quota-manager.d.ts +125 -0
  183. package/dist/quota/quota-manager.d.ts.map +1 -0
  184. package/dist/quota/quota-manager.js +330 -0
  185. package/dist/quota/quota-manager.js.map +1 -0
  186. package/dist/session/session-manager.d.ts +5 -0
  187. package/dist/session/session-manager.d.ts.map +1 -1
  188. package/dist/session/session-manager.js +6 -0
  189. package/dist/session/session-manager.js.map +1 -1
  190. package/dist/session/shared-context-manager.d.ts.map +1 -1
  191. package/dist/session/shared-context-manager.js +2 -1
  192. package/dist/session/shared-context-manager.js.map +1 -1
  193. package/dist/tools/definitions/notebook-management.d.ts.map +1 -1
  194. package/dist/tools/definitions/notebook-management.js +525 -0
  195. package/dist/tools/definitions/notebook-management.js.map +1 -1
  196. package/dist/tools/definitions/system.d.ts.map +1 -1
  197. package/dist/tools/definitions/system.js +158 -0
  198. package/dist/tools/definitions/system.js.map +1 -1
  199. package/dist/tools/handlers.d.ts +225 -0
  200. package/dist/tools/handlers.d.ts.map +1 -1
  201. package/dist/tools/handlers.js +911 -0
  202. package/dist/tools/handlers.js.map +1 -1
  203. package/dist/utils/audit-logger.d.ts +21 -1
  204. package/dist/utils/audit-logger.d.ts.map +1 -1
  205. package/dist/utils/audit-logger.js +53 -4
  206. package/dist/utils/audit-logger.js.map +1 -1
  207. package/dist/utils/crypto.d.ts.map +1 -1
  208. package/dist/utils/crypto.js +8 -15
  209. package/dist/utils/crypto.js.map +1 -1
  210. package/dist/utils/file-permissions.d.ts +85 -0
  211. package/dist/utils/file-permissions.d.ts.map +1 -0
  212. package/dist/utils/file-permissions.js +180 -0
  213. package/dist/utils/file-permissions.js.map +1 -0
  214. package/dist/utils/settings-manager.d.ts.map +1 -1
  215. package/dist/utils/settings-manager.js +6 -11
  216. package/dist/utils/settings-manager.js.map +1 -1
  217. package/dist/webhooks/index.d.ts +8 -0
  218. package/dist/webhooks/index.d.ts.map +1 -0
  219. package/dist/webhooks/index.js +8 -0
  220. package/dist/webhooks/index.js.map +1 -0
  221. package/dist/webhooks/types.d.ts +57 -0
  222. package/dist/webhooks/types.d.ts.map +1 -0
  223. package/dist/webhooks/types.js +5 -0
  224. package/dist/webhooks/types.js.map +1 -0
  225. package/dist/webhooks/webhook-dispatcher.d.ts +120 -0
  226. package/dist/webhooks/webhook-dispatcher.d.ts.map +1 -0
  227. package/dist/webhooks/webhook-dispatcher.js +519 -0
  228. package/dist/webhooks/webhook-dispatcher.js.map +1 -0
  229. package/docs/COMPLIANCE-SPEC.md +1452 -0
  230. package/package.json +30 -4
@@ -0,0 +1,510 @@
1
+ /**
2
+ * Retention Policy Engine
3
+ *
4
+ * Enforces data retention policies automatically.
5
+ * Supports GDPR storage limitation and CSSF 7-year retention requirements.
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 { getAuditLogger } from "../utils/audit-logger.js";
16
+ import { DataClassification } from "./types.js";
17
+ /**
18
+ * Generate a UUID v4
19
+ */
20
+ function generateUUID() {
21
+ return crypto.randomUUID();
22
+ }
23
+ /**
24
+ * Default retention policies
25
+ */
26
+ const DEFAULT_POLICIES = [
27
+ {
28
+ id: "policy_audit_logs",
29
+ name: "Audit Log Retention",
30
+ data_types: ["audit_logs", "compliance_events", "security_logs"],
31
+ classifications: [DataClassification.REGULATED],
32
+ retention_days: 7 * 365, // 7 years (CSSF requirement)
33
+ action: "archive",
34
+ schedule: "monthly",
35
+ regulatory_requirement: "CSSF Circular 20/750",
36
+ },
37
+ {
38
+ id: "policy_consent",
39
+ name: "Consent Record Retention",
40
+ data_types: ["consent_records"],
41
+ retention_days: 7 * 365, // 7 years
42
+ action: "archive",
43
+ schedule: "monthly",
44
+ regulatory_requirement: "GDPR Article 7",
45
+ },
46
+ {
47
+ id: "policy_session",
48
+ name: "Session Data Cleanup",
49
+ data_types: ["session_state", "browser_local_storage"],
50
+ retention_days: 1, // 24 hours
51
+ action: "delete",
52
+ schedule: "daily",
53
+ },
54
+ {
55
+ id: "policy_browser_cache",
56
+ name: "Browser Cache Cleanup",
57
+ data_types: ["browser_cache"],
58
+ retention_days: 7,
59
+ action: "delete",
60
+ schedule: "weekly",
61
+ },
62
+ {
63
+ id: "policy_error_logs",
64
+ name: "Error Log Cleanup",
65
+ data_types: ["error_logs"],
66
+ retention_days: 30,
67
+ action: "delete",
68
+ schedule: "monthly",
69
+ },
70
+ ];
71
+ /**
72
+ * Retention Engine class
73
+ */
74
+ export class RetentionEngine {
75
+ static instance;
76
+ policiesFile;
77
+ policies = new Map();
78
+ loaded = false;
79
+ archiveDir;
80
+ lastRunFile;
81
+ constructor() {
82
+ const config = getConfig();
83
+ this.policiesFile = path.join(config.configDir, "retention-policies.json");
84
+ this.archiveDir = path.join(config.dataDir, "archive");
85
+ this.lastRunFile = path.join(config.configDir, "retention-last-run.json");
86
+ }
87
+ /**
88
+ * Get singleton instance
89
+ */
90
+ static getInstance() {
91
+ if (!RetentionEngine.instance) {
92
+ RetentionEngine.instance = new RetentionEngine();
93
+ }
94
+ return RetentionEngine.instance;
95
+ }
96
+ /**
97
+ * Load policies from storage
98
+ */
99
+ async load() {
100
+ if (this.loaded)
101
+ return;
102
+ // Load default policies first
103
+ for (const policy of DEFAULT_POLICIES) {
104
+ this.policies.set(policy.id, policy);
105
+ }
106
+ // Load custom policies
107
+ try {
108
+ if (fs.existsSync(this.policiesFile)) {
109
+ const content = fs.readFileSync(this.policiesFile, "utf-8");
110
+ const data = JSON.parse(content);
111
+ if (data.policies && Array.isArray(data.policies)) {
112
+ for (const policy of data.policies) {
113
+ this.policies.set(policy.id, policy);
114
+ }
115
+ }
116
+ }
117
+ }
118
+ catch {
119
+ // Use defaults if file is corrupted
120
+ }
121
+ this.loaded = true;
122
+ }
123
+ /**
124
+ * Save policies to storage
125
+ */
126
+ async save() {
127
+ const dir = path.dirname(this.policiesFile);
128
+ mkdirSecure(dir);
129
+ // Only save custom policies (not default ones)
130
+ const customPolicies = Array.from(this.policies.values()).filter(p => !DEFAULT_POLICIES.find(dp => dp.id === p.id));
131
+ const data = {
132
+ version: "1.0.0",
133
+ last_updated: new Date().toISOString(),
134
+ policies: customPolicies,
135
+ };
136
+ writeFileSecure(this.policiesFile, JSON.stringify(data, null, 2));
137
+ }
138
+ /**
139
+ * Add a custom retention policy
140
+ */
141
+ async addPolicy(policy) {
142
+ await this.load();
143
+ const newPolicy = {
144
+ ...policy,
145
+ id: `policy_${generateUUID().slice(0, 8)}`,
146
+ };
147
+ this.policies.set(newPolicy.id, newPolicy);
148
+ await this.save();
149
+ return newPolicy;
150
+ }
151
+ /**
152
+ * Update an existing policy
153
+ */
154
+ async updatePolicy(policyId, updates) {
155
+ await this.load();
156
+ const policy = this.policies.get(policyId);
157
+ if (!policy)
158
+ return null;
159
+ const updatedPolicy = {
160
+ ...policy,
161
+ ...updates,
162
+ };
163
+ this.policies.set(policyId, updatedPolicy);
164
+ await this.save();
165
+ return updatedPolicy;
166
+ }
167
+ /**
168
+ * Remove a policy
169
+ */
170
+ async removePolicy(policyId) {
171
+ await this.load();
172
+ // Don't allow removing default policies
173
+ if (DEFAULT_POLICIES.find(p => p.id === policyId)) {
174
+ return false;
175
+ }
176
+ if (!this.policies.has(policyId)) {
177
+ return false;
178
+ }
179
+ this.policies.delete(policyId);
180
+ await this.save();
181
+ return true;
182
+ }
183
+ /**
184
+ * Get all policies
185
+ */
186
+ async getPolicies() {
187
+ await this.load();
188
+ return Array.from(this.policies.values());
189
+ }
190
+ /**
191
+ * Get policy by ID
192
+ */
193
+ async getPolicy(policyId) {
194
+ await this.load();
195
+ return this.policies.get(policyId) || null;
196
+ }
197
+ /**
198
+ * Check if retention should run based on schedule
199
+ */
200
+ shouldRun(policy) {
201
+ try {
202
+ if (!fs.existsSync(this.lastRunFile)) {
203
+ return true;
204
+ }
205
+ const content = fs.readFileSync(this.lastRunFile, "utf-8");
206
+ const data = JSON.parse(content);
207
+ const lastRun = data.runs?.[policy.id];
208
+ if (!lastRun)
209
+ return true;
210
+ const lastRunDate = new Date(lastRun);
211
+ const now = new Date();
212
+ const diffMs = now.getTime() - lastRunDate.getTime();
213
+ const diffDays = diffMs / (1000 * 60 * 60 * 24);
214
+ switch (policy.schedule) {
215
+ case "daily":
216
+ return diffDays >= 1;
217
+ case "weekly":
218
+ return diffDays >= 7;
219
+ case "monthly":
220
+ return diffDays >= 30;
221
+ default:
222
+ return true;
223
+ }
224
+ }
225
+ catch {
226
+ return true;
227
+ }
228
+ }
229
+ /**
230
+ * Record policy execution time
231
+ */
232
+ recordRun(policyId) {
233
+ try {
234
+ let data = { runs: {} };
235
+ if (fs.existsSync(this.lastRunFile)) {
236
+ const content = fs.readFileSync(this.lastRunFile, "utf-8");
237
+ data = JSON.parse(content);
238
+ }
239
+ data.runs = data.runs || {};
240
+ data.runs[policyId] = new Date().toISOString();
241
+ const dir = path.dirname(this.lastRunFile);
242
+ mkdirSecure(dir);
243
+ writeFileSecure(this.lastRunFile, JSON.stringify(data, null, 2));
244
+ }
245
+ catch {
246
+ // Ignore errors
247
+ }
248
+ }
249
+ /**
250
+ * Execute a single retention policy
251
+ */
252
+ async executePolicy(policy) {
253
+ const results = [];
254
+ const config = getConfig();
255
+ for (const dataType of policy.data_types) {
256
+ const result = {
257
+ policy_id: policy.id,
258
+ policy_name: policy.name,
259
+ executed_at: new Date().toISOString(),
260
+ data_type: dataType,
261
+ action: policy.action,
262
+ items_processed: 0,
263
+ bytes_freed: 0,
264
+ success: true,
265
+ };
266
+ try {
267
+ // Determine the data location based on data type
268
+ const location = this.getDataLocation(dataType, config);
269
+ if (!location || !fs.existsSync(location)) {
270
+ results.push(result);
271
+ continue;
272
+ }
273
+ // Get files to process
274
+ const cutoffDate = new Date();
275
+ cutoffDate.setDate(cutoffDate.getDate() - policy.retention_days);
276
+ const files = this.getExpiredFiles(location, cutoffDate, dataType);
277
+ for (const file of files) {
278
+ try {
279
+ const stats = fs.statSync(file);
280
+ result.bytes_freed += stats.size;
281
+ result.items_processed++;
282
+ switch (policy.action) {
283
+ case "delete":
284
+ fs.unlinkSync(file);
285
+ break;
286
+ case "archive":
287
+ await this.archiveFile(file, dataType);
288
+ fs.unlinkSync(file);
289
+ break;
290
+ case "anonymize":
291
+ // Anonymization would depend on data type
292
+ // For now, we just log that it should be anonymized
293
+ break;
294
+ }
295
+ }
296
+ catch {
297
+ // Continue with other files
298
+ }
299
+ }
300
+ // Log retention event
301
+ const logger = getComplianceLogger();
302
+ await logger.logRetention(policy.action === "delete" ? "delete" : policy.action === "archive" ? "archive" : "cleanup", dataType, result.items_processed, {
303
+ policy_id: policy.id,
304
+ bytes_freed: result.bytes_freed,
305
+ });
306
+ }
307
+ catch (error) {
308
+ result.success = false;
309
+ result.error = error instanceof Error ? error.message : String(error);
310
+ }
311
+ results.push(result);
312
+ }
313
+ return results;
314
+ }
315
+ /**
316
+ * Get the storage location for a data type
317
+ */
318
+ getDataLocation(dataType, config) {
319
+ const locations = {
320
+ "audit_logs": path.join(config.dataDir, "audit"),
321
+ "compliance_events": path.join(config.dataDir, "compliance"),
322
+ "security_logs": path.join(config.dataDir, "security"),
323
+ "session_state": path.join(config.dataDir, "sessions"),
324
+ "browser_cache": path.join(config.dataDir, "browser_cache"),
325
+ "browser_local_storage": path.join(config.dataDir, "browser_state"),
326
+ "error_logs": path.join(config.dataDir, "logs"),
327
+ };
328
+ return locations[dataType] || null;
329
+ }
330
+ /**
331
+ * Get files that have exceeded retention period
332
+ */
333
+ getExpiredFiles(location, cutoffDate, dataType) {
334
+ const expiredFiles = [];
335
+ try {
336
+ const stats = fs.statSync(location);
337
+ if (stats.isFile()) {
338
+ // Single file
339
+ if (stats.mtime < cutoffDate) {
340
+ expiredFiles.push(location);
341
+ }
342
+ }
343
+ else if (stats.isDirectory()) {
344
+ // Directory - check all files
345
+ const files = fs.readdirSync(location);
346
+ for (const file of files) {
347
+ const filePath = path.join(location, file);
348
+ try {
349
+ const fileStats = fs.statSync(filePath);
350
+ // For dated log files, extract date from filename
351
+ if (dataType.includes("logs") || dataType.includes("events")) {
352
+ const dateMatch = file.match(/(\d{4}-\d{2}-\d{2})/);
353
+ if (dateMatch) {
354
+ const fileDate = new Date(dateMatch[1]);
355
+ if (fileDate < cutoffDate) {
356
+ expiredFiles.push(filePath);
357
+ }
358
+ continue;
359
+ }
360
+ }
361
+ // Fall back to modification time
362
+ if (fileStats.mtime < cutoffDate) {
363
+ expiredFiles.push(filePath);
364
+ }
365
+ }
366
+ catch {
367
+ // Skip files we can't access
368
+ }
369
+ }
370
+ }
371
+ }
372
+ catch {
373
+ // Location doesn't exist or can't be accessed
374
+ }
375
+ return expiredFiles;
376
+ }
377
+ /**
378
+ * Archive a file
379
+ */
380
+ async archiveFile(filePath, dataType) {
381
+ mkdirSecure(this.archiveDir);
382
+ const timestamp = new Date().toISOString().split("T")[0];
383
+ const fileName = path.basename(filePath);
384
+ const archiveSubDir = path.join(this.archiveDir, dataType, timestamp);
385
+ mkdirSecure(archiveSubDir);
386
+ const archivePath = path.join(archiveSubDir, fileName);
387
+ fs.copyFileSync(filePath, archivePath);
388
+ }
389
+ /**
390
+ * Run all due retention policies
391
+ */
392
+ async runDuePolicies() {
393
+ await this.load();
394
+ const allResults = [];
395
+ for (const policy of this.policies.values()) {
396
+ if (this.shouldRun(policy)) {
397
+ const results = await this.executePolicy(policy);
398
+ allResults.push(...results);
399
+ this.recordRun(policy.id);
400
+ }
401
+ }
402
+ // Log to audit logger
403
+ const auditLogger = getAuditLogger();
404
+ if (allResults.length > 0) {
405
+ const totalItems = allResults.reduce((sum, r) => sum + r.items_processed, 0);
406
+ const totalBytes = allResults.reduce((sum, r) => sum + r.bytes_freed, 0);
407
+ await auditLogger.logRetentionEvent("cleanup", "multiple", totalItems, {
408
+ policies_executed: allResults.length,
409
+ bytes_freed: totalBytes,
410
+ });
411
+ }
412
+ return allResults;
413
+ }
414
+ /**
415
+ * Force run a specific policy (ignoring schedule)
416
+ */
417
+ async forceRunPolicy(policyId) {
418
+ await this.load();
419
+ const policy = this.policies.get(policyId);
420
+ if (!policy) {
421
+ return [];
422
+ }
423
+ const results = await this.executePolicy(policy);
424
+ this.recordRun(policyId);
425
+ return results;
426
+ }
427
+ /**
428
+ * Get retention status summary
429
+ */
430
+ async getStatus() {
431
+ await this.load();
432
+ const policies = Array.from(this.policies.values());
433
+ let lastRuns = {};
434
+ try {
435
+ if (fs.existsSync(this.lastRunFile)) {
436
+ const content = fs.readFileSync(this.lastRunFile, "utf-8");
437
+ const data = JSON.parse(content);
438
+ lastRuns = data.runs || {};
439
+ }
440
+ }
441
+ catch {
442
+ lastRuns = {};
443
+ }
444
+ // Calculate next due
445
+ const nextDue = [];
446
+ for (const policy of policies) {
447
+ const lastRun = lastRuns[policy.id];
448
+ let dueInDays = 0;
449
+ if (lastRun) {
450
+ const lastRunDate = new Date(lastRun);
451
+ const now = new Date();
452
+ const daysSinceRun = (now.getTime() - lastRunDate.getTime()) / (1000 * 60 * 60 * 24);
453
+ switch (policy.schedule) {
454
+ case "daily":
455
+ dueInDays = Math.max(0, 1 - daysSinceRun);
456
+ break;
457
+ case "weekly":
458
+ dueInDays = Math.max(0, 7 - daysSinceRun);
459
+ break;
460
+ case "monthly":
461
+ dueInDays = Math.max(0, 30 - daysSinceRun);
462
+ break;
463
+ }
464
+ }
465
+ nextDue.push({
466
+ policy_id: policy.id,
467
+ policy_name: policy.name,
468
+ due_in_days: Math.round(dueInDays * 10) / 10,
469
+ });
470
+ }
471
+ nextDue.sort((a, b) => a.due_in_days - b.due_in_days);
472
+ return {
473
+ total_policies: policies.length,
474
+ active_policies: policies.length,
475
+ last_runs: lastRuns,
476
+ next_due: nextDue,
477
+ };
478
+ }
479
+ }
480
+ // ============================================
481
+ // SINGLETON ACCESS
482
+ // ============================================
483
+ /**
484
+ * Get the retention engine instance
485
+ */
486
+ export function getRetentionEngine() {
487
+ return RetentionEngine.getInstance();
488
+ }
489
+ // ============================================
490
+ // CONVENIENCE EXPORTS
491
+ // ============================================
492
+ /**
493
+ * Run all due retention policies
494
+ */
495
+ export async function runRetentionPolicies() {
496
+ return getRetentionEngine().runDuePolicies();
497
+ }
498
+ /**
499
+ * Get all retention policies
500
+ */
501
+ export async function getRetentionPolicies() {
502
+ return getRetentionEngine().getPolicies();
503
+ }
504
+ /**
505
+ * Get retention status
506
+ */
507
+ export async function getRetentionStatus() {
508
+ return getRetentionEngine().getStatus();
509
+ }
510
+ //# sourceMappingURL=retention-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retention-engine.js","sourceRoot":"","sources":["../../src/compliance/retention-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * SIEM Exporter
3
+ *
4
+ * Exports logs to external Security Information and Event Management systems.
5
+ * Supports CEF, LEEF, Syslog, Splunk HEC, and JSON formats.
6
+ *
7
+ * Added by Pantheon Security for enterprise compliance support.
8
+ */
9
+ import type { SIEMFormat, AlertSeverity } from "./types.js";
10
+ /**
11
+ * SIEM event structure
12
+ */
13
+ interface SIEMEvent {
14
+ timestamp: string;
15
+ event_type: string;
16
+ event_name: string;
17
+ severity: AlertSeverity;
18
+ source: string;
19
+ message: string;
20
+ details: Record<string, unknown>;
21
+ }
22
+ /**
23
+ * SIEM Exporter class
24
+ */
25
+ export declare class SIEMExporter {
26
+ private static instance;
27
+ private config;
28
+ private eventQueue;
29
+ private flushTimer;
30
+ private isExporting;
31
+ private failedDir;
32
+ private constructor();
33
+ /**
34
+ * Get singleton instance
35
+ */
36
+ static getInstance(): SIEMExporter;
37
+ /**
38
+ * Start the flush timer
39
+ */
40
+ private startFlushTimer;
41
+ /**
42
+ * Stop the flush timer
43
+ */
44
+ stop(): void;
45
+ /**
46
+ * Check if event meets minimum severity
47
+ */
48
+ private meetsMinimumSeverity;
49
+ /**
50
+ * Check if event type is allowed
51
+ */
52
+ private isEventTypeAllowed;
53
+ /**
54
+ * Queue an event for export
55
+ */
56
+ queueEvent(event: SIEMEvent): Promise<boolean>;
57
+ /**
58
+ * Flush queued events
59
+ */
60
+ flush(): Promise<{
61
+ sent: number;
62
+ failed: number;
63
+ }>;
64
+ /**
65
+ * Export a single event
66
+ */
67
+ private exportEvent;
68
+ /**
69
+ * Format event as CEF (Common Event Format)
70
+ */
71
+ private formatCEF;
72
+ /**
73
+ * Export event as CEF
74
+ */
75
+ private exportCEF;
76
+ /**
77
+ * Format event as LEEF (Log Event Extended Format)
78
+ */
79
+ private formatLEEF;
80
+ /**
81
+ * Export event as LEEF
82
+ */
83
+ private exportLEEF;
84
+ /**
85
+ * Format event as RFC 5424 syslog
86
+ */
87
+ private formatSyslog;
88
+ /**
89
+ * Export event as syslog
90
+ */
91
+ private exportSyslog;
92
+ /**
93
+ * Export event to Splunk HEC
94
+ */
95
+ private exportSplunkHEC;
96
+ /**
97
+ * Export event as JSON
98
+ */
99
+ private exportJSON;
100
+ /**
101
+ * Send message to configured endpoint
102
+ */
103
+ private sendToEndpoint;
104
+ /**
105
+ * HTTP POST request
106
+ */
107
+ private httpPost;
108
+ /**
109
+ * Escape CEF extension value
110
+ */
111
+ private escapeExtension;
112
+ /**
113
+ * Save failed event for later retry
114
+ */
115
+ private saveFailedEvent;
116
+ /**
117
+ * Retry failed events
118
+ */
119
+ retryFailed(): Promise<{
120
+ sent: number;
121
+ failed: number;
122
+ }>;
123
+ /**
124
+ * Get exporter statistics
125
+ */
126
+ getStats(): {
127
+ enabled: boolean;
128
+ format: SIEMFormat;
129
+ queue_size: number;
130
+ endpoint_configured: boolean;
131
+ syslog_configured: boolean;
132
+ };
133
+ }
134
+ /**
135
+ * Get the SIEM exporter instance
136
+ */
137
+ export declare function getSIEMExporter(): SIEMExporter;
138
+ /**
139
+ * Queue an event for SIEM export
140
+ */
141
+ export declare function exportToSIEM(eventType: string, eventName: string, severity: AlertSeverity, message: string, source: string, details?: Record<string, unknown>): Promise<boolean>;
142
+ /**
143
+ * Flush SIEM event queue
144
+ */
145
+ export declare function flushSIEM(): Promise<{
146
+ sent: number;
147
+ failed: number;
148
+ }>;
149
+ export {};
150
+ //# sourceMappingURL=siem-exporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"siem-exporter.d.ts","sourceRoot":"","sources":["../../src/compliance/siem-exporter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,KAAK,EAAc,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAoDxE;;GAEG;AACH,UAAU,SAAS;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IACtC,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO;IAWP;;OAEG;WACW,WAAW,IAAI,YAAY;IAOzC;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACI,IAAI,IAAI,IAAI;IAOnB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;OAEG;IACU,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IA8B3D;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IA6B/D;;OAEG;YACW,WAAW;IAgBzB;;OAEG;IACH,OAAO,CAAC,SAAS;IA6BjB;;OAEG;YACW,SAAS;IAKvB;;OAEG;IACH,OAAO,CAAC,UAAU;IA2BlB;;OAEG;YACW,UAAU;IAKxB;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;OAEG;YACW,YAAY;IAmC1B;;OAEG;YACW,eAAe;IAsB7B;;OAEG;YACW,UAAU;IAIxB;;OAEG;YACW,cAAc;IAwB5B;;OAEG;YACW,QAAQ;IA0CtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;YACW,eAAe;IAU7B;;OAEG;IACU,WAAW,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAkDrE;;OAEG;IACI,QAAQ,IAAI;QACjB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,UAAU,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,mBAAmB,EAAE,OAAO,CAAC;QAC7B,iBAAiB,EAAE,OAAO,CAAC;KAC5B;CASF;AAMD;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AAMD;;GAEG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAE3E"}