@pan-sec/notebooklm-mcp 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/README.md +61 -7
  2. package/SECURITY.md +40 -6
  3. package/dist/auth/mcp-auth.d.ts.map +1 -1
  4. package/dist/auth/mcp-auth.js +3 -6
  5. package/dist/auth/mcp-auth.js.map +1 -1
  6. package/dist/compliance/alert-manager.d.ts +120 -0
  7. package/dist/compliance/alert-manager.d.ts.map +1 -0
  8. package/dist/compliance/alert-manager.js +420 -0
  9. package/dist/compliance/alert-manager.js.map +1 -0
  10. package/dist/compliance/breach-detection.d.ts +134 -0
  11. package/dist/compliance/breach-detection.d.ts.map +1 -0
  12. package/dist/compliance/breach-detection.js +456 -0
  13. package/dist/compliance/breach-detection.js.map +1 -0
  14. package/dist/compliance/change-log.d.ts +113 -0
  15. package/dist/compliance/change-log.d.ts.map +1 -0
  16. package/dist/compliance/change-log.js +275 -0
  17. package/dist/compliance/change-log.js.map +1 -0
  18. package/dist/compliance/compliance-logger.d.ts +136 -0
  19. package/dist/compliance/compliance-logger.d.ts.map +1 -0
  20. package/dist/compliance/compliance-logger.js +425 -0
  21. package/dist/compliance/compliance-logger.js.map +1 -0
  22. package/dist/compliance/compliance-tools.d.ts +18 -0
  23. package/dist/compliance/compliance-tools.d.ts.map +1 -0
  24. package/dist/compliance/compliance-tools.js +673 -0
  25. package/dist/compliance/compliance-tools.js.map +1 -0
  26. package/dist/compliance/consent-manager.d.ts +130 -0
  27. package/dist/compliance/consent-manager.d.ts.map +1 -0
  28. package/dist/compliance/consent-manager.js +386 -0
  29. package/dist/compliance/consent-manager.js.map +1 -0
  30. package/dist/compliance/dashboard.d.ts +243 -0
  31. package/dist/compliance/dashboard.d.ts.map +1 -0
  32. package/dist/compliance/dashboard.js +519 -0
  33. package/dist/compliance/dashboard.js.map +1 -0
  34. package/dist/compliance/data-classification.d.ts +117 -0
  35. package/dist/compliance/data-classification.d.ts.map +1 -0
  36. package/dist/compliance/data-classification.js +469 -0
  37. package/dist/compliance/data-classification.js.map +1 -0
  38. package/dist/compliance/data-erasure.d.ts +110 -0
  39. package/dist/compliance/data-erasure.d.ts.map +1 -0
  40. package/dist/compliance/data-erasure.js +501 -0
  41. package/dist/compliance/data-erasure.js.map +1 -0
  42. package/dist/compliance/data-export.d.ts +85 -0
  43. package/dist/compliance/data-export.d.ts.map +1 -0
  44. package/dist/compliance/data-export.js +394 -0
  45. package/dist/compliance/data-export.js.map +1 -0
  46. package/dist/compliance/data-inventory.d.ts +136 -0
  47. package/dist/compliance/data-inventory.d.ts.map +1 -0
  48. package/dist/compliance/data-inventory.js +335 -0
  49. package/dist/compliance/data-inventory.js.map +1 -0
  50. package/dist/compliance/dsar-handler.d.ts +123 -0
  51. package/dist/compliance/dsar-handler.d.ts.map +1 -0
  52. package/dist/compliance/dsar-handler.js +371 -0
  53. package/dist/compliance/dsar-handler.js.map +1 -0
  54. package/dist/compliance/evidence-collector.d.ts +187 -0
  55. package/dist/compliance/evidence-collector.d.ts.map +1 -0
  56. package/dist/compliance/evidence-collector.js +656 -0
  57. package/dist/compliance/evidence-collector.js.map +1 -0
  58. package/dist/compliance/health-monitor.d.ts +111 -0
  59. package/dist/compliance/health-monitor.d.ts.map +1 -0
  60. package/dist/compliance/health-monitor.js +509 -0
  61. package/dist/compliance/health-monitor.js.map +1 -0
  62. package/dist/compliance/incident-manager.d.ts +131 -0
  63. package/dist/compliance/incident-manager.d.ts.map +1 -0
  64. package/dist/compliance/incident-manager.js +418 -0
  65. package/dist/compliance/incident-manager.js.map +1 -0
  66. package/dist/compliance/index.d.ts +32 -0
  67. package/dist/compliance/index.d.ts.map +1 -0
  68. package/dist/compliance/index.js +35 -0
  69. package/dist/compliance/index.js.map +1 -0
  70. package/dist/compliance/policy-docs.d.ts +108 -0
  71. package/dist/compliance/policy-docs.d.ts.map +1 -0
  72. package/dist/compliance/policy-docs.js +464 -0
  73. package/dist/compliance/policy-docs.js.map +1 -0
  74. package/dist/compliance/privacy-notice-text.d.ts +58 -0
  75. package/dist/compliance/privacy-notice-text.d.ts.map +1 -0
  76. package/dist/compliance/privacy-notice-text.js +161 -0
  77. package/dist/compliance/privacy-notice-text.js.map +1 -0
  78. package/dist/compliance/privacy-notice.d.ts +128 -0
  79. package/dist/compliance/privacy-notice.d.ts.map +1 -0
  80. package/dist/compliance/privacy-notice.js +250 -0
  81. package/dist/compliance/privacy-notice.js.map +1 -0
  82. package/dist/compliance/report-generator.d.ts +168 -0
  83. package/dist/compliance/report-generator.d.ts.map +1 -0
  84. package/dist/compliance/report-generator.js +830 -0
  85. package/dist/compliance/report-generator.js.map +1 -0
  86. package/dist/compliance/retention-engine.d.ts +130 -0
  87. package/dist/compliance/retention-engine.d.ts.map +1 -0
  88. package/dist/compliance/retention-engine.js +510 -0
  89. package/dist/compliance/retention-engine.js.map +1 -0
  90. package/dist/compliance/siem-exporter.d.ts +150 -0
  91. package/dist/compliance/siem-exporter.d.ts.map +1 -0
  92. package/dist/compliance/siem-exporter.js +509 -0
  93. package/dist/compliance/siem-exporter.js.map +1 -0
  94. package/dist/compliance/types.d.ts +601 -0
  95. package/dist/compliance/types.d.ts.map +1 -0
  96. package/dist/compliance/types.js +22 -0
  97. package/dist/compliance/types.js.map +1 -0
  98. package/dist/config.d.ts +4 -0
  99. package/dist/config.d.ts.map +1 -1
  100. package/dist/config.js +8 -1
  101. package/dist/config.js.map +1 -1
  102. package/dist/library/notebook-library.d.ts.map +1 -1
  103. package/dist/library/notebook-library.js +2 -1
  104. package/dist/library/notebook-library.js.map +1 -1
  105. package/dist/session/shared-context-manager.d.ts.map +1 -1
  106. package/dist/session/shared-context-manager.js +2 -1
  107. package/dist/session/shared-context-manager.js.map +1 -1
  108. package/dist/utils/audit-logger.d.ts +21 -1
  109. package/dist/utils/audit-logger.d.ts.map +1 -1
  110. package/dist/utils/audit-logger.js +53 -4
  111. package/dist/utils/audit-logger.js.map +1 -1
  112. package/dist/utils/crypto.d.ts.map +1 -1
  113. package/dist/utils/crypto.js +8 -15
  114. package/dist/utils/crypto.js.map +1 -1
  115. package/dist/utils/file-permissions.d.ts +85 -0
  116. package/dist/utils/file-permissions.d.ts.map +1 -0
  117. package/dist/utils/file-permissions.js +180 -0
  118. package/dist/utils/file-permissions.js.map +1 -0
  119. package/dist/utils/settings-manager.d.ts.map +1 -1
  120. package/dist/utils/settings-manager.js +6 -11
  121. package/dist/utils/settings-manager.js.map +1 -1
  122. package/docs/COMPLIANCE-SPEC.md +1452 -0
  123. package/package.json +30 -4
@@ -0,0 +1,420 @@
1
+ /**
2
+ * Alert Manager
3
+ *
4
+ * Sends alerts for security and compliance events.
5
+ * Supports multiple channels: console, file, webhook, email.
6
+ *
7
+ * Added by Pantheon Security for enterprise compliance support.
8
+ */
9
+ import crypto from "crypto";
10
+ import path from "path";
11
+ import https from "https";
12
+ import { getConfig } from "../config.js";
13
+ import { mkdirSecure, appendFileSecure } from "../utils/file-permissions.js";
14
+ /**
15
+ * Generate a UUID v4
16
+ */
17
+ function generateUUID() {
18
+ return crypto.randomUUID();
19
+ }
20
+ /**
21
+ * Get alert configuration from environment
22
+ */
23
+ function getAlertConfig() {
24
+ return {
25
+ enabled: process.env.NLMCP_ALERTS_ENABLED !== "false",
26
+ channels: {
27
+ console: true,
28
+ file: process.env.NLMCP_ALERTS_FILE ? {
29
+ path: process.env.NLMCP_ALERTS_FILE,
30
+ format: "json",
31
+ } : undefined,
32
+ webhook: process.env.NLMCP_ALERTS_WEBHOOK_URL ? {
33
+ url: process.env.NLMCP_ALERTS_WEBHOOK_URL,
34
+ headers: process.env.NLMCP_ALERTS_WEBHOOK_HEADERS
35
+ ? JSON.parse(process.env.NLMCP_ALERTS_WEBHOOK_HEADERS)
36
+ : undefined,
37
+ } : undefined,
38
+ },
39
+ min_severity: process.env.NLMCP_ALERTS_MIN_SEVERITY || "warning",
40
+ cooldown_seconds: parseInt(process.env.NLMCP_ALERTS_COOLDOWN || "300", 10),
41
+ max_alerts_per_hour: parseInt(process.env.NLMCP_ALERTS_MAX_PER_HOUR || "60", 10),
42
+ };
43
+ }
44
+ /**
45
+ * Severity level ordering
46
+ */
47
+ const SEVERITY_LEVELS = {
48
+ info: 0,
49
+ warning: 1,
50
+ error: 2,
51
+ critical: 3,
52
+ };
53
+ /**
54
+ * Alert Manager class
55
+ */
56
+ export class AlertManager {
57
+ static instance;
58
+ config;
59
+ alertHistory = new Map(); // key -> last alert timestamp
60
+ hourlyAlerts = [];
61
+ alertsDir;
62
+ constructor() {
63
+ this.config = getAlertConfig();
64
+ const config = getConfig();
65
+ this.alertsDir = path.join(config.dataDir, "alerts");
66
+ if (this.config.enabled && this.config.channels.file) {
67
+ mkdirSecure(this.alertsDir);
68
+ }
69
+ }
70
+ /**
71
+ * Get singleton instance
72
+ */
73
+ static getInstance() {
74
+ if (!AlertManager.instance) {
75
+ AlertManager.instance = new AlertManager();
76
+ }
77
+ return AlertManager.instance;
78
+ }
79
+ /**
80
+ * Check if alert should be sent based on severity
81
+ */
82
+ meetsMinimumSeverity(severity) {
83
+ return SEVERITY_LEVELS[severity] >= SEVERITY_LEVELS[this.config.min_severity];
84
+ }
85
+ /**
86
+ * Check if alert is within cooldown period
87
+ */
88
+ isInCooldown(key) {
89
+ const lastAlert = this.alertHistory.get(key);
90
+ if (!lastAlert)
91
+ return false;
92
+ const elapsed = (Date.now() - lastAlert) / 1000;
93
+ return elapsed < this.config.cooldown_seconds;
94
+ }
95
+ /**
96
+ * Check if hourly limit is exceeded
97
+ */
98
+ isHourlyLimitExceeded() {
99
+ const oneHourAgo = Date.now() - 60 * 60 * 1000;
100
+ this.hourlyAlerts = this.hourlyAlerts.filter(a => a.timestamp > oneHourAgo);
101
+ return this.hourlyAlerts.length >= this.config.max_alerts_per_hour;
102
+ }
103
+ /**
104
+ * Record that an alert was sent
105
+ */
106
+ recordAlert(key) {
107
+ this.alertHistory.set(key, Date.now());
108
+ this.hourlyAlerts.push({ timestamp: Date.now() });
109
+ }
110
+ /**
111
+ * Generate a unique key for deduplication
112
+ */
113
+ generateKey(severity, title, source) {
114
+ return `${severity}:${title}:${source}`;
115
+ }
116
+ /**
117
+ * Send an alert
118
+ */
119
+ async sendAlert(severity, title, message, source, details) {
120
+ if (!this.config.enabled) {
121
+ return null;
122
+ }
123
+ // Check severity
124
+ if (!this.meetsMinimumSeverity(severity)) {
125
+ return null;
126
+ }
127
+ // Check cooldown
128
+ const key = this.generateKey(severity, title, source);
129
+ if (this.isInCooldown(key)) {
130
+ return null;
131
+ }
132
+ // Check hourly limit
133
+ if (this.isHourlyLimitExceeded()) {
134
+ // Log that we're rate limiting, but only once per hour
135
+ if (!this.isInCooldown("rate_limit_warning")) {
136
+ console.warn("[AlertManager] Hourly alert limit exceeded, suppressing alerts");
137
+ this.recordAlert("rate_limit_warning");
138
+ }
139
+ return null;
140
+ }
141
+ // Create alert
142
+ const alert = {
143
+ id: generateUUID(),
144
+ timestamp: new Date().toISOString(),
145
+ severity,
146
+ title,
147
+ message,
148
+ source,
149
+ details,
150
+ sent_to: [],
151
+ };
152
+ // Send to all configured channels
153
+ const results = await Promise.allSettled([
154
+ this.sendToConsole(alert),
155
+ this.sendToFile(alert),
156
+ this.sendToWebhook(alert),
157
+ ]);
158
+ // Record sent channels
159
+ if (results[0].status === "fulfilled" && results[0].value) {
160
+ alert.sent_to.push("console");
161
+ }
162
+ if (results[1].status === "fulfilled" && results[1].value) {
163
+ alert.sent_to.push("file");
164
+ }
165
+ if (results[2].status === "fulfilled" && results[2].value) {
166
+ alert.sent_to.push("webhook");
167
+ }
168
+ // Record this alert
169
+ this.recordAlert(key);
170
+ return alert;
171
+ }
172
+ /**
173
+ * Send alert to console
174
+ */
175
+ async sendToConsole(alert) {
176
+ if (!this.config.channels.console) {
177
+ return false;
178
+ }
179
+ const icon = this.getSeverityIcon(alert.severity);
180
+ const timestamp = new Date(alert.timestamp).toLocaleTimeString();
181
+ console.log(`${icon} [${timestamp}] ${alert.title}`);
182
+ console.log(` ${alert.message}`);
183
+ if (alert.details) {
184
+ console.log(` Details: ${JSON.stringify(alert.details)}`);
185
+ }
186
+ return true;
187
+ }
188
+ /**
189
+ * Send alert to file
190
+ */
191
+ async sendToFile(alert) {
192
+ if (!this.config.channels.file) {
193
+ return false;
194
+ }
195
+ try {
196
+ const filePath = this.config.channels.file.path || path.join(this.alertsDir, `alerts-${new Date().toISOString().split("T")[0]}.jsonl`);
197
+ const line = this.config.channels.file.format === "json"
198
+ ? JSON.stringify(alert) + "\n"
199
+ : `${alert.timestamp} [${alert.severity.toUpperCase()}] ${alert.title}: ${alert.message}\n`;
200
+ appendFileSecure(filePath, line);
201
+ return true;
202
+ }
203
+ catch {
204
+ return false;
205
+ }
206
+ }
207
+ /**
208
+ * Send alert to webhook
209
+ */
210
+ async sendToWebhook(alert) {
211
+ if (!this.config.channels.webhook?.url) {
212
+ return false;
213
+ }
214
+ try {
215
+ const url = new URL(this.config.channels.webhook.url);
216
+ // Format message for common webhook services
217
+ const body = this.formatWebhookBody(alert);
218
+ return new Promise((resolve) => {
219
+ const req = https.request({
220
+ hostname: url.hostname,
221
+ port: url.port || 443,
222
+ path: url.pathname + url.search,
223
+ method: "POST",
224
+ headers: {
225
+ "Content-Type": "application/json",
226
+ ...this.config.channels.webhook?.headers,
227
+ },
228
+ timeout: 10000,
229
+ }, (res) => {
230
+ resolve(res.statusCode !== undefined && res.statusCode >= 200 && res.statusCode < 300);
231
+ });
232
+ req.on("error", () => resolve(false));
233
+ req.on("timeout", () => {
234
+ req.destroy();
235
+ resolve(false);
236
+ });
237
+ req.write(JSON.stringify(body));
238
+ req.end();
239
+ });
240
+ }
241
+ catch {
242
+ return false;
243
+ }
244
+ }
245
+ /**
246
+ * Format webhook body for common services (Slack, Teams, generic)
247
+ */
248
+ formatWebhookBody(alert) {
249
+ const url = this.config.channels.webhook?.url || "";
250
+ // Slack format
251
+ if (url.includes("slack.com")) {
252
+ return {
253
+ text: `${this.getSeverityIcon(alert.severity)} *${alert.title}*`,
254
+ attachments: [
255
+ {
256
+ color: this.getSeverityColor(alert.severity),
257
+ text: alert.message,
258
+ fields: alert.details
259
+ ? Object.entries(alert.details).map(([k, v]) => ({
260
+ title: k,
261
+ value: String(v),
262
+ short: true,
263
+ }))
264
+ : [],
265
+ footer: `Source: ${alert.source}`,
266
+ ts: Math.floor(new Date(alert.timestamp).getTime() / 1000),
267
+ },
268
+ ],
269
+ };
270
+ }
271
+ // Microsoft Teams format
272
+ if (url.includes("office.com") || url.includes("microsoft.com")) {
273
+ return {
274
+ "@type": "MessageCard",
275
+ "@context": "http://schema.org/extensions",
276
+ themeColor: this.getSeverityColor(alert.severity).replace("#", ""),
277
+ summary: alert.title,
278
+ sections: [
279
+ {
280
+ activityTitle: `${this.getSeverityIcon(alert.severity)} ${alert.title}`,
281
+ activitySubtitle: alert.source,
282
+ facts: alert.details
283
+ ? Object.entries(alert.details).map(([k, v]) => ({
284
+ name: k,
285
+ value: String(v),
286
+ }))
287
+ : [],
288
+ text: alert.message,
289
+ },
290
+ ],
291
+ };
292
+ }
293
+ // Generic format
294
+ return {
295
+ alert_id: alert.id,
296
+ severity: alert.severity,
297
+ title: alert.title,
298
+ message: alert.message,
299
+ source: alert.source,
300
+ timestamp: alert.timestamp,
301
+ details: alert.details,
302
+ };
303
+ }
304
+ /**
305
+ * Get severity icon
306
+ */
307
+ getSeverityIcon(severity) {
308
+ switch (severity) {
309
+ case "critical":
310
+ return "🚨";
311
+ case "error":
312
+ return "❌";
313
+ case "warning":
314
+ return "⚠️";
315
+ case "info":
316
+ return "ℹ️";
317
+ }
318
+ }
319
+ /**
320
+ * Get severity color (for webhooks)
321
+ */
322
+ getSeverityColor(severity) {
323
+ switch (severity) {
324
+ case "critical":
325
+ return "#FF0000";
326
+ case "error":
327
+ return "#FF6600";
328
+ case "warning":
329
+ return "#FFCC00";
330
+ case "info":
331
+ return "#0066FF";
332
+ }
333
+ }
334
+ // ============================================
335
+ // CONVENIENCE METHODS
336
+ // ============================================
337
+ /**
338
+ * Send a critical alert
339
+ */
340
+ async critical(title, message, source, details) {
341
+ return this.sendAlert("critical", title, message, source, details);
342
+ }
343
+ /**
344
+ * Send an error alert
345
+ */
346
+ async error(title, message, source, details) {
347
+ return this.sendAlert("error", title, message, source, details);
348
+ }
349
+ /**
350
+ * Send a warning alert
351
+ */
352
+ async warning(title, message, source, details) {
353
+ return this.sendAlert("warning", title, message, source, details);
354
+ }
355
+ /**
356
+ * Send an info alert
357
+ */
358
+ async info(title, message, source, details) {
359
+ return this.sendAlert("info", title, message, source, details);
360
+ }
361
+ /**
362
+ * Get alert statistics
363
+ */
364
+ getStats() {
365
+ const channels = [];
366
+ if (this.config.channels.console)
367
+ channels.push("console");
368
+ if (this.config.channels.file)
369
+ channels.push("file");
370
+ if (this.config.channels.webhook)
371
+ channels.push("webhook");
372
+ const oneHourAgo = Date.now() - 60 * 60 * 1000;
373
+ const alertsThisHour = this.hourlyAlerts.filter(a => a.timestamp > oneHourAgo).length;
374
+ return {
375
+ enabled: this.config.enabled,
376
+ min_severity: this.config.min_severity,
377
+ cooldown_seconds: this.config.cooldown_seconds,
378
+ max_alerts_per_hour: this.config.max_alerts_per_hour,
379
+ alerts_this_hour: alertsThisHour,
380
+ channels,
381
+ };
382
+ }
383
+ /**
384
+ * Update configuration at runtime
385
+ */
386
+ updateConfig(updates) {
387
+ this.config = { ...this.config, ...updates };
388
+ }
389
+ }
390
+ // ============================================
391
+ // SINGLETON ACCESS
392
+ // ============================================
393
+ /**
394
+ * Get the alert manager instance
395
+ */
396
+ export function getAlertManager() {
397
+ return AlertManager.getInstance();
398
+ }
399
+ // ============================================
400
+ // CONVENIENCE EXPORTS
401
+ // ============================================
402
+ /**
403
+ * Send an alert
404
+ */
405
+ export async function sendAlert(severity, title, message, source, details) {
406
+ return getAlertManager().sendAlert(severity, title, message, source, details);
407
+ }
408
+ /**
409
+ * Send a critical alert
410
+ */
411
+ export async function alertCritical(title, message, source, details) {
412
+ return getAlertManager().critical(title, message, source, details);
413
+ }
414
+ /**
415
+ * Send a warning alert
416
+ */
417
+ export async function alertWarning(title, message, source, details) {
418
+ return getAlertManager().warning(title, message, source, details);
419
+ }
420
+ //# sourceMappingURL=alert-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-manager.js","sourceRoot":"","sources":["../../src/compliance/alert-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Breach Detection
3
+ *
4
+ * Detects potential security breaches and policy violations.
5
+ * Implements detection rules with configurable thresholds and actions.
6
+ *
7
+ * Added by Pantheon Security for enterprise compliance support.
8
+ */
9
+ import type { BreachRule, BreachAction, IncidentSeverity } from "./types.js";
10
+ /**
11
+ * Breach detection result
12
+ */
13
+ interface BreachDetection {
14
+ id: string;
15
+ detected_at: string;
16
+ rule: BreachRule;
17
+ event_count: number;
18
+ window_start: string;
19
+ window_end: string;
20
+ actions_taken: BreachAction[];
21
+ incident_id?: string;
22
+ blocked: boolean;
23
+ }
24
+ /**
25
+ * Breach Detector class
26
+ */
27
+ export declare class BreachDetector {
28
+ private static instance;
29
+ private rulesFile;
30
+ private rules;
31
+ private eventTrackers;
32
+ private detections;
33
+ private loaded;
34
+ private enabled;
35
+ private blockedPatterns;
36
+ private constructor();
37
+ /**
38
+ * Get singleton instance
39
+ */
40
+ static getInstance(): BreachDetector;
41
+ /**
42
+ * Load rules from storage
43
+ */
44
+ private load;
45
+ /**
46
+ * Save custom rules to storage
47
+ */
48
+ private save;
49
+ /**
50
+ * Check an event against all rules
51
+ */
52
+ checkEvent(eventPattern: string, details?: Record<string, unknown>): Promise<BreachDetection | null>;
53
+ /**
54
+ * Check if event pattern matches rule pattern
55
+ */
56
+ private matchesPattern;
57
+ /**
58
+ * Handle a detected breach
59
+ */
60
+ private handleBreach;
61
+ /**
62
+ * Action: Log the breach
63
+ */
64
+ private actionLog;
65
+ /**
66
+ * Action: Send alert
67
+ */
68
+ private actionAlert;
69
+ /**
70
+ * Action: Block the pattern
71
+ */
72
+ private actionBlock;
73
+ /**
74
+ * Action: Notify admin
75
+ */
76
+ private actionNotifyAdmin;
77
+ /**
78
+ * Action: Create incident
79
+ */
80
+ private actionCreateIncident;
81
+ /**
82
+ * Check if a pattern is blocked
83
+ */
84
+ isBlocked(pattern: string): boolean;
85
+ /**
86
+ * Unblock a pattern
87
+ */
88
+ unblock(pattern: string): boolean;
89
+ /**
90
+ * Get all rules
91
+ */
92
+ getRules(): Promise<BreachRule[]>;
93
+ /**
94
+ * Add a custom rule
95
+ */
96
+ addRule(rule: Omit<BreachRule, "id">): Promise<BreachRule>;
97
+ /**
98
+ * Remove a rule
99
+ */
100
+ removeRule(ruleId: string): Promise<boolean>;
101
+ /**
102
+ * Get recent detections
103
+ */
104
+ getRecentDetections(limit?: number): BreachDetection[];
105
+ /**
106
+ * Get detection statistics
107
+ */
108
+ getStats(): {
109
+ enabled: boolean;
110
+ rules_count: number;
111
+ blocked_patterns: number;
112
+ detections_count: number;
113
+ by_severity: Record<IncidentSeverity, number>;
114
+ by_rule: Record<string, number>;
115
+ };
116
+ }
117
+ /**
118
+ * Get the breach detector instance
119
+ */
120
+ export declare function getBreachDetector(): BreachDetector;
121
+ /**
122
+ * Check an event for breach detection
123
+ */
124
+ export declare function checkForBreach(eventPattern: string, details?: Record<string, unknown>): Promise<BreachDetection | null>;
125
+ /**
126
+ * Check if a pattern is blocked
127
+ */
128
+ export declare function isPatternBlocked(pattern: string): boolean;
129
+ /**
130
+ * Get breach detection rules
131
+ */
132
+ export declare function getBreachRules(): Promise<BreachRule[]>;
133
+ export {};
134
+ //# sourceMappingURL=breach-detection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breach-detection.d.ts","sourceRoot":"","sources":["../../src/compliance/breach-detection.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAkH7E;;GAEG;AACH,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;IACxC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,eAAe,CAA0B;IAEjD,OAAO;IAMP;;OAEG;WACW,WAAW,IAAI,cAAc;IAO3C;;OAEG;YACW,IAAI;IA0BlB;;OAEG;YACW,IAAI;IAkBlB;;OAEG;IACU,UAAU,CACrB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IA4ClC;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB;;OAEG;YACW,YAAY;IAgD1B;;OAEG;YACW,SAAS;IAkBvB;;OAEG;YACW,WAAW;IA2BzB;;OAEG;YACW,WAAW;IAKzB;;OAEG;YACW,iBAAiB;IAe/B;;OAEG;YACW,oBAAoB;IAwBlC;;OAEG;IACI,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI1C;;OAEG;IACI,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIxC;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAK9C;;OAEG;IACU,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAcvE;;OAEG;IACU,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBzD;;OAEG;IACI,mBAAmB,CAAC,KAAK,GAAE,MAAY,GAAG,eAAe,EAAE;IAIlE;;OAEG;IACI,QAAQ,IAAI;QACjB,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;QACzB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAC9C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC;CAwBF;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAElD;AAMD;;GAEG;AACH,wBAAsB,cAAc,CAClC,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAEjC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAE5D"}