@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,335 @@
1
+ /**
2
+ * Data Inventory
3
+ *
4
+ * Maintains a registry of all personal data stored by the application.
5
+ * Supports GDPR Article 30 (Records of Processing Activities).
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 { getDataClassifier } from "./data-classification.js";
15
+ import { getComplianceLogger } from "./compliance-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
+ * Data Inventory class
25
+ */
26
+ export class DataInventory {
27
+ static instance;
28
+ inventoryFile;
29
+ entries = new Map();
30
+ loaded = false;
31
+ constructor() {
32
+ const config = getConfig();
33
+ this.inventoryFile = path.join(config.configDir, "data-inventory.json");
34
+ }
35
+ /**
36
+ * Get singleton instance
37
+ */
38
+ static getInstance() {
39
+ if (!DataInventory.instance) {
40
+ DataInventory.instance = new DataInventory();
41
+ }
42
+ return DataInventory.instance;
43
+ }
44
+ /**
45
+ * Load inventory from storage
46
+ */
47
+ async load() {
48
+ if (this.loaded)
49
+ return;
50
+ try {
51
+ if (fs.existsSync(this.inventoryFile)) {
52
+ const content = fs.readFileSync(this.inventoryFile, "utf-8");
53
+ const data = JSON.parse(content);
54
+ if (data.entries && Array.isArray(data.entries)) {
55
+ for (const entry of data.entries) {
56
+ this.entries.set(entry.id, entry);
57
+ }
58
+ }
59
+ }
60
+ }
61
+ catch {
62
+ // Start fresh if file is corrupted
63
+ this.entries = new Map();
64
+ }
65
+ // Auto-discover data on first load
66
+ await this.autoDiscover();
67
+ this.loaded = true;
68
+ }
69
+ /**
70
+ * Save inventory to storage
71
+ */
72
+ async save() {
73
+ const dir = path.dirname(this.inventoryFile);
74
+ mkdirSecure(dir);
75
+ const data = {
76
+ version: "1.0.0",
77
+ generated_at: new Date().toISOString(),
78
+ entries: Array.from(this.entries.values()),
79
+ };
80
+ writeFileSecure(this.inventoryFile, JSON.stringify(data, null, 2));
81
+ }
82
+ /**
83
+ * Auto-discover data based on known data types and locations
84
+ */
85
+ async autoDiscover() {
86
+ const config = getConfig();
87
+ const classifier = getDataClassifier();
88
+ // Known data locations
89
+ const dataLocations = [
90
+ { dataType: "notebook_library", location: path.join(config.configDir, "library.json") },
91
+ { dataType: "user_settings", location: path.join(config.configDir, "settings.json") },
92
+ { dataType: "consent_records", location: path.join(config.configDir, "consent.json") },
93
+ { dataType: "browser_cookies", location: path.join(config.dataDir, "browser_state") },
94
+ { dataType: "session_state", location: path.join(config.dataDir, "sessions") },
95
+ { dataType: "audit_logs", location: path.join(config.dataDir, "audit") },
96
+ { dataType: "compliance_events", location: path.join(config.dataDir, "compliance") },
97
+ { dataType: "encryption_keys", location: path.join(config.dataDir, "pq-keys.enc") },
98
+ { dataType: "mcp_auth_token", location: path.join(config.configDir, "auth-token.hash") },
99
+ ];
100
+ for (const { dataType, location } of dataLocations) {
101
+ // Check if we already have an entry for this data type
102
+ const existingEntry = Array.from(this.entries.values()).find(e => e.data_type === dataType);
103
+ if (!existingEntry) {
104
+ const entry = classifier.buildInventoryEntry(dataType, location);
105
+ if (entry) {
106
+ this.entries.set(entry.id, entry);
107
+ }
108
+ }
109
+ }
110
+ }
111
+ /**
112
+ * Register a new data type in the inventory
113
+ */
114
+ async register(dataType, storageLocation, options = {}) {
115
+ await this.load();
116
+ const classifier = getDataClassifier();
117
+ const baseEntry = classifier.buildInventoryEntry(dataType, storageLocation);
118
+ const entry = {
119
+ id: generateUUID(),
120
+ data_type: dataType,
121
+ description: options.description || baseEntry?.description || `Data of type: ${dataType}`,
122
+ classification: options.classification || baseEntry?.classification || DataClassification.INTERNAL,
123
+ data_categories: options.dataCategories || baseEntry?.data_categories || [],
124
+ storage_location: storageLocation,
125
+ encrypted: options.encrypted ?? baseEntry?.encrypted ?? false,
126
+ retention_policy: baseEntry?.retention_policy || "30_days",
127
+ retention_days: options.retentionDays || baseEntry?.retention_days || 30,
128
+ legal_basis: options.legalBasis || baseEntry?.legal_basis || "legitimate_interest",
129
+ processing_purposes: baseEntry?.processing_purposes || ["service_provision"],
130
+ who_can_access: ["owner"],
131
+ exportable: options.exportable ?? baseEntry?.exportable ?? true,
132
+ erasable: options.erasable ?? baseEntry?.erasable ?? true,
133
+ last_updated: new Date().toISOString(),
134
+ };
135
+ this.entries.set(entry.id, entry);
136
+ await this.save();
137
+ // Log the registration
138
+ const logger = getComplianceLogger();
139
+ await logger.log("data_processing", "data_type_registered", { type: "system" }, "success", {
140
+ resource: { type: dataType },
141
+ details: { storage_location: storageLocation },
142
+ });
143
+ return entry;
144
+ }
145
+ /**
146
+ * Update an existing entry
147
+ */
148
+ async update(entryId, updates) {
149
+ await this.load();
150
+ const entry = this.entries.get(entryId);
151
+ if (!entry)
152
+ return null;
153
+ const updatedEntry = {
154
+ ...entry,
155
+ ...updates,
156
+ last_updated: new Date().toISOString(),
157
+ };
158
+ this.entries.set(entryId, updatedEntry);
159
+ await this.save();
160
+ return updatedEntry;
161
+ }
162
+ /**
163
+ * Remove an entry from the inventory
164
+ */
165
+ async remove(entryId) {
166
+ await this.load();
167
+ if (!this.entries.has(entryId)) {
168
+ return false;
169
+ }
170
+ this.entries.delete(entryId);
171
+ await this.save();
172
+ return true;
173
+ }
174
+ /**
175
+ * Get all inventory entries
176
+ */
177
+ async getAll() {
178
+ await this.load();
179
+ return Array.from(this.entries.values());
180
+ }
181
+ /**
182
+ * Get entry by ID
183
+ */
184
+ async getById(entryId) {
185
+ await this.load();
186
+ return this.entries.get(entryId) || null;
187
+ }
188
+ /**
189
+ * Get entries by data type
190
+ */
191
+ async getByDataType(dataType) {
192
+ await this.load();
193
+ return Array.from(this.entries.values()).filter(e => e.data_type === dataType);
194
+ }
195
+ /**
196
+ * Get entries by classification
197
+ */
198
+ async getByClassification(classification) {
199
+ await this.load();
200
+ return Array.from(this.entries.values()).filter(e => e.classification === classification);
201
+ }
202
+ /**
203
+ * Get entries by data category
204
+ */
205
+ async getByCategory(category) {
206
+ await this.load();
207
+ return Array.from(this.entries.values()).filter(e => e.data_categories.includes(category));
208
+ }
209
+ /**
210
+ * Get exportable data entries (for GDPR data portability)
211
+ */
212
+ async getExportable() {
213
+ await this.load();
214
+ return Array.from(this.entries.values()).filter(e => e.exportable);
215
+ }
216
+ /**
217
+ * Get erasable data entries (for GDPR right to erasure)
218
+ */
219
+ async getErasable() {
220
+ await this.load();
221
+ return Array.from(this.entries.values()).filter(e => e.erasable);
222
+ }
223
+ /**
224
+ * Get personal data entries (for DSAR)
225
+ */
226
+ async getPersonalData() {
227
+ await this.load();
228
+ return Array.from(this.entries.values()).filter(e => e.data_categories.includes("personal_data") ||
229
+ e.data_categories.includes("sensitive_data"));
230
+ }
231
+ /**
232
+ * Generate GDPR Article 30 Records of Processing Activities
233
+ */
234
+ async generateROPA() {
235
+ await this.load();
236
+ const entries = Array.from(this.entries.values());
237
+ // Collect all unique purposes
238
+ const purposes = [...new Set(entries.flatMap(e => e.processing_purposes))];
239
+ // Collect all retention periods
240
+ const retentionPeriods = entries.map(e => ({
241
+ data_type: e.data_type,
242
+ period: typeof e.retention_days === "number"
243
+ ? `${e.retention_days} days`
244
+ : e.retention_days,
245
+ }));
246
+ return {
247
+ controller: "Pantheon Security (local processing)",
248
+ purposes,
249
+ categories_of_data_subjects: ["Users of NotebookLM MCP Server"],
250
+ categories_of_personal_data: [
251
+ ...new Set(entries.flatMap(e => e.data_categories)),
252
+ ],
253
+ recipients: ["None - all data is processed locally"],
254
+ transfers_to_third_countries: ["None"],
255
+ retention_periods: retentionPeriods,
256
+ security_measures: [
257
+ "Post-quantum encryption (ML-KEM-768 + ChaCha20-Poly1305)",
258
+ "Certificate pinning for external connections",
259
+ "Memory scrubbing for sensitive data",
260
+ "Tamper-evident audit logging",
261
+ "Secure file permissions",
262
+ ],
263
+ };
264
+ }
265
+ /**
266
+ * Get inventory summary
267
+ */
268
+ async getSummary() {
269
+ await this.load();
270
+ const entries = Array.from(this.entries.values());
271
+ const byClassification = {
272
+ [DataClassification.PUBLIC]: 0,
273
+ [DataClassification.INTERNAL]: 0,
274
+ [DataClassification.CONFIDENTIAL]: 0,
275
+ [DataClassification.RESTRICTED]: 0,
276
+ [DataClassification.REGULATED]: 0,
277
+ };
278
+ for (const entry of entries) {
279
+ byClassification[entry.classification]++;
280
+ }
281
+ return {
282
+ total_entries: entries.length,
283
+ by_classification: byClassification,
284
+ exportable_count: entries.filter(e => e.exportable).length,
285
+ erasable_count: entries.filter(e => e.erasable).length,
286
+ personal_data_count: entries.filter(e => e.data_categories.includes("personal_data")).length,
287
+ encrypted_count: entries.filter(e => e.encrypted).length,
288
+ };
289
+ }
290
+ /**
291
+ * Export inventory for compliance reporting
292
+ */
293
+ async export() {
294
+ await this.load();
295
+ const data = {
296
+ export_date: new Date().toISOString(),
297
+ version: "1.0.0",
298
+ summary: await this.getSummary(),
299
+ ropa: await this.generateROPA(),
300
+ entries: Array.from(this.entries.values()),
301
+ };
302
+ return JSON.stringify(data, null, 2);
303
+ }
304
+ }
305
+ // ============================================
306
+ // SINGLETON ACCESS
307
+ // ============================================
308
+ /**
309
+ * Get the data inventory instance
310
+ */
311
+ export function getDataInventory() {
312
+ return DataInventory.getInstance();
313
+ }
314
+ // ============================================
315
+ // CONVENIENCE EXPORTS
316
+ // ============================================
317
+ /**
318
+ * Get all data inventory entries
319
+ */
320
+ export async function getAllDataInventory() {
321
+ return getDataInventory().getAll();
322
+ }
323
+ /**
324
+ * Get exportable data entries
325
+ */
326
+ export async function getExportableData() {
327
+ return getDataInventory().getExportable();
328
+ }
329
+ /**
330
+ * Get erasable data entries
331
+ */
332
+ export async function getErasableData() {
333
+ return getDataInventory().getErasable();
334
+ }
335
+ //# sourceMappingURL=data-inventory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-inventory.js","sourceRoot":"","sources":["../../src/compliance/data-inventory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Data Subject Access Request (DSAR) Handler
3
+ *
4
+ * Handles Data Subject Access Requests as required by GDPR Article 15.
5
+ * Provides users with information about their personal data processing.
6
+ *
7
+ * Added by Pantheon Security for enterprise compliance support.
8
+ */
9
+ import type { DSARResponse } from "./types.js";
10
+ /**
11
+ * DSAR request record
12
+ */
13
+ interface DSARRequest {
14
+ request_id: string;
15
+ submitted_at: string;
16
+ type: "access" | "portability" | "erasure" | "rectification" | "restriction" | "objection";
17
+ status: "pending" | "processing" | "completed" | "rejected";
18
+ completed_at?: string;
19
+ response?: DSARResponse;
20
+ notes?: string;
21
+ }
22
+ /**
23
+ * DSAR Handler class
24
+ */
25
+ export declare class DSARHandler {
26
+ private static instance;
27
+ private requestsFile;
28
+ private requests;
29
+ private loaded;
30
+ private constructor();
31
+ /**
32
+ * Get singleton instance
33
+ */
34
+ static getInstance(): DSARHandler;
35
+ /**
36
+ * Load requests from storage
37
+ */
38
+ private load;
39
+ /**
40
+ * Save requests to storage
41
+ */
42
+ private save;
43
+ /**
44
+ * Submit a new DSAR
45
+ */
46
+ submitRequest(type?: DSARRequest["type"]): Promise<DSARRequest>;
47
+ /**
48
+ * Process a DSAR and generate response
49
+ */
50
+ processRequest(requestId: string): Promise<DSARResponse | null>;
51
+ /**
52
+ * Generate DSAR response
53
+ */
54
+ private generateResponse;
55
+ /**
56
+ * Get a sample of actual data for DSAR (without sensitive content)
57
+ */
58
+ private getDataSample;
59
+ /**
60
+ * Format retention period for human readability
61
+ */
62
+ private formatRetention;
63
+ /**
64
+ * Get request by ID
65
+ */
66
+ getRequest(requestId: string): Promise<DSARRequest | null>;
67
+ /**
68
+ * Get all requests
69
+ */
70
+ getAllRequests(): Promise<DSARRequest[]>;
71
+ /**
72
+ * Get pending requests
73
+ */
74
+ getPendingRequests(): Promise<DSARRequest[]>;
75
+ /**
76
+ * Submit and process a DSAR immediately (for automated systems)
77
+ */
78
+ submitAndProcess(type?: DSARRequest["type"]): Promise<DSARResponse>;
79
+ /**
80
+ * Get summary response (without full personal data)
81
+ */
82
+ getSummaryResponse(): Promise<{
83
+ data_categories: string[];
84
+ processing_purposes: string[];
85
+ legal_bases: string[];
86
+ available_rights: string[];
87
+ data_recipients: string[];
88
+ exportable_data_types: string[];
89
+ erasable_data_types: string[];
90
+ }>;
91
+ /**
92
+ * Get DSAR statistics
93
+ */
94
+ getStatistics(): Promise<{
95
+ total_requests: number;
96
+ pending_requests: number;
97
+ completed_requests: number;
98
+ by_type: Record<string, number>;
99
+ average_processing_time_hours?: number;
100
+ }>;
101
+ }
102
+ /**
103
+ * Get the DSAR handler instance
104
+ */
105
+ export declare function getDSARHandler(): DSARHandler;
106
+ /**
107
+ * Submit a new DSAR
108
+ */
109
+ export declare function submitDSAR(type?: DSARRequest["type"]): Promise<DSARRequest>;
110
+ /**
111
+ * Process a DSAR
112
+ */
113
+ export declare function processDSAR(requestId: string): Promise<DSARResponse | null>;
114
+ /**
115
+ * Submit and process a DSAR immediately
116
+ */
117
+ export declare function handleDSAR(type?: DSARRequest["type"]): Promise<DSARResponse>;
118
+ /**
119
+ * Get DSAR summary response
120
+ */
121
+ export declare function getDSARSummary(): Promise<ReturnType<DSARHandler["getSummaryResponse"]>>;
122
+ export {};
123
+ //# sourceMappingURL=dsar-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dsar-handler.d.ts","sourceRoot":"","sources":["../../src/compliance/dsar-handler.ts"],"names":[],"mappings":"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"}