@pan-sec/notebooklm-mcp 1.4.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 (145) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +289 -0
  3. package/SECURITY.md +539 -0
  4. package/dist/auth/auth-manager.d.ts +137 -0
  5. package/dist/auth/auth-manager.d.ts.map +1 -0
  6. package/dist/auth/auth-manager.js +984 -0
  7. package/dist/auth/auth-manager.js.map +1 -0
  8. package/dist/auth/mcp-auth.d.ts +102 -0
  9. package/dist/auth/mcp-auth.d.ts.map +1 -0
  10. package/dist/auth/mcp-auth.js +286 -0
  11. package/dist/auth/mcp-auth.js.map +1 -0
  12. package/dist/config.d.ts +89 -0
  13. package/dist/config.d.ts.map +1 -0
  14. package/dist/config.js +216 -0
  15. package/dist/config.js.map +1 -0
  16. package/dist/errors.d.ts +26 -0
  17. package/dist/errors.d.ts.map +1 -0
  18. package/dist/errors.js +41 -0
  19. package/dist/errors.js.map +1 -0
  20. package/dist/index.d.ts +32 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +371 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/library/notebook-library.d.ts +70 -0
  25. package/dist/library/notebook-library.d.ts.map +1 -0
  26. package/dist/library/notebook-library.js +279 -0
  27. package/dist/library/notebook-library.js.map +1 -0
  28. package/dist/library/types.d.ts +67 -0
  29. package/dist/library/types.d.ts.map +1 -0
  30. package/dist/library/types.js +8 -0
  31. package/dist/library/types.js.map +1 -0
  32. package/dist/resources/resource-handlers.d.ts +22 -0
  33. package/dist/resources/resource-handlers.d.ts.map +1 -0
  34. package/dist/resources/resource-handlers.js +216 -0
  35. package/dist/resources/resource-handlers.js.map +1 -0
  36. package/dist/session/browser-session.d.ts +108 -0
  37. package/dist/session/browser-session.d.ts.map +1 -0
  38. package/dist/session/browser-session.js +621 -0
  39. package/dist/session/browser-session.js.map +1 -0
  40. package/dist/session/session-manager.d.ts +77 -0
  41. package/dist/session/session-manager.d.ts.map +1 -0
  42. package/dist/session/session-manager.js +314 -0
  43. package/dist/session/session-manager.js.map +1 -0
  44. package/dist/session/session-timeout.d.ts +122 -0
  45. package/dist/session/session-timeout.d.ts.map +1 -0
  46. package/dist/session/session-timeout.js +281 -0
  47. package/dist/session/session-timeout.js.map +1 -0
  48. package/dist/session/shared-context-manager.d.ts +107 -0
  49. package/dist/session/shared-context-manager.d.ts.map +1 -0
  50. package/dist/session/shared-context-manager.js +447 -0
  51. package/dist/session/shared-context-manager.js.map +1 -0
  52. package/dist/tools/definitions/ask-question.d.ts +8 -0
  53. package/dist/tools/definitions/ask-question.d.ts.map +1 -0
  54. package/dist/tools/definitions/ask-question.js +211 -0
  55. package/dist/tools/definitions/ask-question.js.map +1 -0
  56. package/dist/tools/definitions/notebook-management.d.ts +3 -0
  57. package/dist/tools/definitions/notebook-management.d.ts.map +1 -0
  58. package/dist/tools/definitions/notebook-management.js +243 -0
  59. package/dist/tools/definitions/notebook-management.js.map +1 -0
  60. package/dist/tools/definitions/session-management.d.ts +3 -0
  61. package/dist/tools/definitions/session-management.d.ts.map +1 -0
  62. package/dist/tools/definitions/session-management.js +41 -0
  63. package/dist/tools/definitions/session-management.js.map +1 -0
  64. package/dist/tools/definitions/system.d.ts +3 -0
  65. package/dist/tools/definitions/system.d.ts.map +1 -0
  66. package/dist/tools/definitions/system.js +143 -0
  67. package/dist/tools/definitions/system.js.map +1 -0
  68. package/dist/tools/definitions.d.ts +12 -0
  69. package/dist/tools/definitions.d.ts.map +1 -0
  70. package/dist/tools/definitions.js +26 -0
  71. package/dist/tools/definitions.js.map +1 -0
  72. package/dist/tools/handlers.d.ts +213 -0
  73. package/dist/tools/handlers.d.ts.map +1 -0
  74. package/dist/tools/handlers.js +813 -0
  75. package/dist/tools/handlers.js.map +1 -0
  76. package/dist/tools/index.d.ts +8 -0
  77. package/dist/tools/index.d.ts.map +1 -0
  78. package/dist/tools/index.js +8 -0
  79. package/dist/tools/index.js.map +1 -0
  80. package/dist/types.d.ts +82 -0
  81. package/dist/types.d.ts.map +1 -0
  82. package/dist/types.js +5 -0
  83. package/dist/types.js.map +1 -0
  84. package/dist/utils/audit-logger.d.ts +140 -0
  85. package/dist/utils/audit-logger.d.ts.map +1 -0
  86. package/dist/utils/audit-logger.js +361 -0
  87. package/dist/utils/audit-logger.js.map +1 -0
  88. package/dist/utils/cert-pinning.d.ts +97 -0
  89. package/dist/utils/cert-pinning.d.ts.map +1 -0
  90. package/dist/utils/cert-pinning.js +328 -0
  91. package/dist/utils/cert-pinning.js.map +1 -0
  92. package/dist/utils/cleanup-manager.d.ts +133 -0
  93. package/dist/utils/cleanup-manager.d.ts.map +1 -0
  94. package/dist/utils/cleanup-manager.js +673 -0
  95. package/dist/utils/cleanup-manager.js.map +1 -0
  96. package/dist/utils/cli-handler.d.ts +16 -0
  97. package/dist/utils/cli-handler.d.ts.map +1 -0
  98. package/dist/utils/cli-handler.js +102 -0
  99. package/dist/utils/cli-handler.js.map +1 -0
  100. package/dist/utils/crypto.d.ts +175 -0
  101. package/dist/utils/crypto.d.ts.map +1 -0
  102. package/dist/utils/crypto.js +612 -0
  103. package/dist/utils/crypto.js.map +1 -0
  104. package/dist/utils/logger.d.ts +61 -0
  105. package/dist/utils/logger.d.ts.map +1 -0
  106. package/dist/utils/logger.js +92 -0
  107. package/dist/utils/logger.js.map +1 -0
  108. package/dist/utils/page-utils.d.ts +54 -0
  109. package/dist/utils/page-utils.d.ts.map +1 -0
  110. package/dist/utils/page-utils.js +405 -0
  111. package/dist/utils/page-utils.js.map +1 -0
  112. package/dist/utils/response-validator.d.ts +98 -0
  113. package/dist/utils/response-validator.d.ts.map +1 -0
  114. package/dist/utils/response-validator.js +352 -0
  115. package/dist/utils/response-validator.js.map +1 -0
  116. package/dist/utils/secrets-scanner.d.ts +126 -0
  117. package/dist/utils/secrets-scanner.d.ts.map +1 -0
  118. package/dist/utils/secrets-scanner.js +443 -0
  119. package/dist/utils/secrets-scanner.js.map +1 -0
  120. package/dist/utils/secure-memory.d.ts +130 -0
  121. package/dist/utils/secure-memory.d.ts.map +1 -0
  122. package/dist/utils/secure-memory.js +279 -0
  123. package/dist/utils/secure-memory.js.map +1 -0
  124. package/dist/utils/security.d.ts +83 -0
  125. package/dist/utils/security.d.ts.map +1 -0
  126. package/dist/utils/security.js +272 -0
  127. package/dist/utils/security.js.map +1 -0
  128. package/dist/utils/settings-manager.d.ts +37 -0
  129. package/dist/utils/settings-manager.d.ts.map +1 -0
  130. package/dist/utils/settings-manager.js +125 -0
  131. package/dist/utils/settings-manager.js.map +1 -0
  132. package/dist/utils/stealth-utils.d.ts +135 -0
  133. package/dist/utils/stealth-utils.d.ts.map +1 -0
  134. package/dist/utils/stealth-utils.js +398 -0
  135. package/dist/utils/stealth-utils.js.map +1 -0
  136. package/dist/utils/tool-validation.d.ts +93 -0
  137. package/dist/utils/tool-validation.d.ts.map +1 -0
  138. package/dist/utils/tool-validation.js +277 -0
  139. package/dist/utils/tool-validation.js.map +1 -0
  140. package/docs/SECURITY_IMPLEMENTATION_PLAN.md +437 -0
  141. package/docs/configuration.md +94 -0
  142. package/docs/tools.md +34 -0
  143. package/docs/troubleshooting.md +59 -0
  144. package/docs/usage-guide.md +245 -0
  145. package/package.json +82 -0
@@ -0,0 +1,443 @@
1
+ /**
2
+ * Secrets Scanner for NotebookLM MCP Server
3
+ *
4
+ * Detects and prevents credential exposure:
5
+ * - API keys
6
+ * - Passwords
7
+ * - Tokens
8
+ * - Private keys
9
+ * - Connection strings
10
+ *
11
+ * Why this matters:
12
+ * - Prevents accidental credential logging
13
+ * - Detects leaked secrets in responses
14
+ * - Compliance with security best practices
15
+ *
16
+ * Patterns derived from: TruffleHog, GitLeaks, MEDUSA
17
+ * Added by Pantheon Security for hardened fork.
18
+ */
19
+ import { log } from "./logger.js";
20
+ import { audit } from "./audit-logger.js";
21
+ /**
22
+ * Secret detection patterns
23
+ * Based on TruffleHog, GitLeaks, and custom patterns
24
+ */
25
+ const SECRET_PATTERNS = [
26
+ // === CRITICAL: High-value secrets ===
27
+ // AWS
28
+ {
29
+ name: "AWS Access Key ID",
30
+ pattern: /\b(A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}\b/g,
31
+ severity: "critical",
32
+ description: "AWS Access Key ID",
33
+ },
34
+ {
35
+ name: "AWS Secret Access Key",
36
+ pattern: /\b[A-Za-z0-9/+=]{40}\b(?=.*aws|.*secret|.*key)/gi,
37
+ severity: "critical",
38
+ description: "Potential AWS Secret Access Key",
39
+ },
40
+ // Google
41
+ {
42
+ name: "Google API Key",
43
+ pattern: /\bAIza[0-9A-Za-z_-]{35}\b/g,
44
+ severity: "critical",
45
+ description: "Google API Key",
46
+ },
47
+ {
48
+ name: "Google OAuth Client ID",
49
+ pattern: /\b[0-9]+-[a-z0-9_]{32}\.apps\.googleusercontent\.com\b/g,
50
+ severity: "high",
51
+ description: "Google OAuth Client ID",
52
+ },
53
+ {
54
+ name: "Google OAuth Client Secret",
55
+ pattern: /\bGOCspx-[A-Za-z0-9_-]{28}\b/g,
56
+ severity: "critical",
57
+ description: "Google OAuth Client Secret",
58
+ },
59
+ // GitHub
60
+ {
61
+ name: "GitHub Personal Access Token",
62
+ pattern: /\b(ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{36,}\b/g,
63
+ severity: "critical",
64
+ description: "GitHub Personal Access Token",
65
+ },
66
+ {
67
+ name: "GitHub OAuth Token",
68
+ pattern: /\bgho_[A-Za-z0-9]{36}\b/g,
69
+ severity: "critical",
70
+ description: "GitHub OAuth Access Token",
71
+ },
72
+ // Slack
73
+ {
74
+ name: "Slack Bot Token",
75
+ pattern: /\bxoxb-[0-9]{10,13}-[0-9]{10,13}-[a-zA-Z0-9]{24}\b/g,
76
+ severity: "critical",
77
+ description: "Slack Bot Token",
78
+ },
79
+ {
80
+ name: "Slack User Token",
81
+ pattern: /\bxoxp-[0-9]{10,13}-[0-9]{10,13}-[a-zA-Z0-9]{24}\b/g,
82
+ severity: "critical",
83
+ description: "Slack User Token",
84
+ },
85
+ {
86
+ name: "Slack Webhook URL",
87
+ pattern: /\bhttps:\/\/hooks\.slack\.com\/services\/T[A-Z0-9]{8,}\/B[A-Z0-9]{8,}\/[a-zA-Z0-9]{24}\b/g,
88
+ severity: "high",
89
+ description: "Slack Webhook URL",
90
+ },
91
+ // Stripe
92
+ {
93
+ name: "Stripe API Key",
94
+ pattern: /\b(sk|pk)_(test|live)_[0-9a-zA-Z]{24,}\b/g,
95
+ severity: "critical",
96
+ description: "Stripe API Key",
97
+ },
98
+ // OpenAI
99
+ {
100
+ name: "OpenAI API Key",
101
+ pattern: /\bsk-[A-Za-z0-9]{48}\b/g,
102
+ severity: "critical",
103
+ description: "OpenAI API Key",
104
+ },
105
+ // Anthropic
106
+ {
107
+ name: "Anthropic API Key",
108
+ pattern: /\bsk-ant-[A-Za-z0-9_-]{40,}\b/g,
109
+ severity: "critical",
110
+ description: "Anthropic API Key",
111
+ },
112
+ // === HIGH: Authentication credentials ===
113
+ // Private Keys
114
+ {
115
+ name: "RSA Private Key",
116
+ pattern: /-----BEGIN RSA PRIVATE KEY-----[\s\S]*?-----END RSA PRIVATE KEY-----/g,
117
+ severity: "critical",
118
+ description: "RSA Private Key",
119
+ },
120
+ {
121
+ name: "EC Private Key",
122
+ pattern: /-----BEGIN EC PRIVATE KEY-----[\s\S]*?-----END EC PRIVATE KEY-----/g,
123
+ severity: "critical",
124
+ description: "EC Private Key",
125
+ },
126
+ {
127
+ name: "Generic Private Key",
128
+ pattern: /-----BEGIN PRIVATE KEY-----[\s\S]*?-----END PRIVATE KEY-----/g,
129
+ severity: "critical",
130
+ description: "Private Key",
131
+ },
132
+ {
133
+ name: "PGP Private Key",
134
+ pattern: /-----BEGIN PGP PRIVATE KEY BLOCK-----[\s\S]*?-----END PGP PRIVATE KEY BLOCK-----/g,
135
+ severity: "critical",
136
+ description: "PGP Private Key Block",
137
+ },
138
+ // JWT
139
+ {
140
+ name: "JSON Web Token",
141
+ pattern: /\beyJ[A-Za-z0-9_-]*\.eyJ[A-Za-z0-9_-]*\.[A-Za-z0-9_-]+\b/g,
142
+ severity: "high",
143
+ description: "JSON Web Token (JWT)",
144
+ },
145
+ // Database Connection Strings
146
+ {
147
+ name: "PostgreSQL Connection String",
148
+ pattern: /\bpostgres(?:ql)?:\/\/[^:]+:[^@]+@[^/]+\/[^\s]+/gi,
149
+ severity: "critical",
150
+ description: "PostgreSQL Connection String with credentials",
151
+ },
152
+ {
153
+ name: "MongoDB Connection String",
154
+ pattern: /\bmongodb(?:\+srv)?:\/\/[^:]+:[^@]+@[^/]+/gi,
155
+ severity: "critical",
156
+ description: "MongoDB Connection String with credentials",
157
+ },
158
+ {
159
+ name: "MySQL Connection String",
160
+ pattern: /\bmysql:\/\/[^:]+:[^@]+@[^/]+/gi,
161
+ severity: "critical",
162
+ description: "MySQL Connection String with credentials",
163
+ },
164
+ // === MEDIUM: Potentially sensitive ===
165
+ // Generic password patterns
166
+ {
167
+ name: "Password in URL",
168
+ pattern: /\b[a-zA-Z]+:\/\/[^:]+:([^@]+)@/g,
169
+ severity: "high",
170
+ description: "Password in URL",
171
+ redactFn: (match) => match.replace(/:([^@]+)@/, ":****@"),
172
+ },
173
+ {
174
+ name: "Password Assignment",
175
+ pattern: /(?:password|passwd|pwd|secret|token|api_key|apikey|api-key)\s*[:=]\s*["']?([^\s"']{8,})["']?/gi,
176
+ severity: "medium",
177
+ description: "Password or secret assignment",
178
+ },
179
+ // Generic API key patterns
180
+ {
181
+ name: "Generic API Key",
182
+ pattern: /\b[a-zA-Z0-9_-]*api[_-]?key[a-zA-Z0-9_-]*\s*[:=]\s*["']?([^\s"']{16,})["']?/gi,
183
+ severity: "medium",
184
+ description: "Generic API key pattern",
185
+ },
186
+ // Bearer tokens
187
+ {
188
+ name: "Bearer Token",
189
+ pattern: /\bBearer\s+[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/gi,
190
+ severity: "high",
191
+ description: "Bearer Authorization Token",
192
+ },
193
+ // Basic Auth
194
+ {
195
+ name: "Basic Auth Header",
196
+ pattern: /\bBasic\s+[A-Za-z0-9+/=]{20,}\b/gi,
197
+ severity: "high",
198
+ description: "Basic Authentication Header",
199
+ },
200
+ // === LOW: May need review ===
201
+ // High entropy strings (potential secrets)
202
+ {
203
+ name: "High Entropy String",
204
+ pattern: /\b[A-Za-z0-9+/]{32,}={0,2}\b/g,
205
+ severity: "low",
206
+ description: "High entropy string (possible encoded secret)",
207
+ },
208
+ // SSH keys
209
+ {
210
+ name: "SSH Private Key",
211
+ pattern: /-----BEGIN OPENSSH PRIVATE KEY-----[\s\S]*?-----END OPENSSH PRIVATE KEY-----/g,
212
+ severity: "critical",
213
+ description: "OpenSSH Private Key",
214
+ },
215
+ // Email with password context
216
+ {
217
+ name: "Email with Password",
218
+ pattern: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b.*(?:password|pwd|passwd)/gi,
219
+ severity: "medium",
220
+ description: "Email address in password context",
221
+ },
222
+ ];
223
+ /**
224
+ * Get secrets scanner configuration
225
+ */
226
+ function getSecretsConfig() {
227
+ const minSeverity = (process.env.NLMCP_SECRETS_MIN_SEVERITY || "low");
228
+ return {
229
+ enabled: process.env.NLMCP_SECRETS_SCANNING !== "false",
230
+ blockOnDetection: process.env.NLMCP_SECRETS_BLOCK === "true",
231
+ autoRedact: process.env.NLMCP_SECRETS_REDACT !== "false",
232
+ minSeverity,
233
+ customPatterns: [],
234
+ ignoredPatterns: (process.env.NLMCP_SECRETS_IGNORE || "").split(",").filter(Boolean),
235
+ };
236
+ }
237
+ /**
238
+ * Severity level ordering
239
+ */
240
+ const SEVERITY_ORDER = {
241
+ critical: 4,
242
+ high: 3,
243
+ medium: 2,
244
+ low: 1,
245
+ };
246
+ /**
247
+ * Secrets Scanner Class
248
+ */
249
+ export class SecretsScanner {
250
+ config;
251
+ patterns;
252
+ stats = {
253
+ scanned: 0,
254
+ secretsFound: 0,
255
+ blocked: 0,
256
+ redacted: 0,
257
+ };
258
+ constructor(config) {
259
+ this.config = { ...getSecretsConfig(), ...config };
260
+ this.patterns = [...SECRET_PATTERNS, ...this.config.customPatterns].filter((p) => !this.config.ignoredPatterns.includes(p.name));
261
+ }
262
+ /**
263
+ * Scan text for secrets
264
+ */
265
+ scan(text) {
266
+ if (!this.config.enabled || !text) {
267
+ return [];
268
+ }
269
+ this.stats.scanned++;
270
+ const matches = [];
271
+ const minSeverityLevel = SEVERITY_ORDER[this.config.minSeverity];
272
+ for (const pattern of this.patterns) {
273
+ // Skip if below minimum severity
274
+ if (SEVERITY_ORDER[pattern.severity] < minSeverityLevel) {
275
+ continue;
276
+ }
277
+ // Reset regex state
278
+ pattern.pattern.lastIndex = 0;
279
+ let match;
280
+ while ((match = pattern.pattern.exec(text)) !== null) {
281
+ const matchedText = match[0];
282
+ // Calculate line and column
283
+ const beforeMatch = text.substring(0, match.index);
284
+ const lines = beforeMatch.split("\n");
285
+ const line = lines.length;
286
+ const column = lines[lines.length - 1].length + 1;
287
+ // Generate redacted version
288
+ const redacted = pattern.redactFn
289
+ ? pattern.redactFn(matchedText)
290
+ : this.defaultRedact(matchedText, pattern.name);
291
+ matches.push({
292
+ type: pattern.name,
293
+ pattern: pattern.description,
294
+ match: matchedText,
295
+ redacted,
296
+ line,
297
+ column,
298
+ severity: pattern.severity,
299
+ });
300
+ this.stats.secretsFound++;
301
+ }
302
+ }
303
+ return matches;
304
+ }
305
+ /**
306
+ * Scan and optionally redact secrets
307
+ */
308
+ async scanAndRedact(text) {
309
+ const secrets = this.scan(text);
310
+ if (secrets.length === 0) {
311
+ return { clean: text, secrets: [], blocked: false };
312
+ }
313
+ // Log the detection
314
+ const criticalCount = secrets.filter((s) => s.severity === "critical").length;
315
+ const highCount = secrets.filter((s) => s.severity === "high").length;
316
+ if (criticalCount > 0 || highCount > 0) {
317
+ log.warning(`🔐 Secrets detected: ${criticalCount} critical, ${highCount} high`);
318
+ for (const secret of secrets.filter((s) => s.severity === "critical" || s.severity === "high")) {
319
+ log.warning(` - ${secret.type} at line ${secret.line}`);
320
+ }
321
+ }
322
+ // Audit log
323
+ await audit.security("secrets_detected", criticalCount > 0 ? "critical" : "warning", {
324
+ count: secrets.length,
325
+ types: [...new Set(secrets.map((s) => s.type))],
326
+ severities: {
327
+ critical: criticalCount,
328
+ high: highCount,
329
+ medium: secrets.filter((s) => s.severity === "medium").length,
330
+ low: secrets.filter((s) => s.severity === "low").length,
331
+ },
332
+ });
333
+ // Check if we should block
334
+ if (this.config.blockOnDetection && (criticalCount > 0 || highCount > 0)) {
335
+ this.stats.blocked++;
336
+ return {
337
+ clean: "[BLOCKED: Sensitive data detected]",
338
+ secrets,
339
+ blocked: true,
340
+ };
341
+ }
342
+ // Redact if enabled
343
+ let clean = text;
344
+ if (this.config.autoRedact) {
345
+ // Sort by position descending to avoid offset issues
346
+ const sortedSecrets = [...secrets].sort((a, b) => {
347
+ const posA = text.indexOf(a.match);
348
+ const posB = text.indexOf(b.match);
349
+ return posB - posA;
350
+ });
351
+ for (const secret of sortedSecrets) {
352
+ clean = clean.replace(secret.match, secret.redacted);
353
+ this.stats.redacted++;
354
+ }
355
+ }
356
+ return { clean, secrets, blocked: false };
357
+ }
358
+ /**
359
+ * Default redaction function
360
+ */
361
+ defaultRedact(value, type) {
362
+ if (value.length <= 8) {
363
+ return `[REDACTED:${type}]`;
364
+ }
365
+ // Show first 4 and last 4 characters
366
+ const prefix = value.substring(0, 4);
367
+ const suffix = value.substring(value.length - 4);
368
+ const middleLength = value.length - 8;
369
+ return `${prefix}${"*".repeat(Math.min(middleLength, 8))}${suffix}`;
370
+ }
371
+ /**
372
+ * Add a custom pattern
373
+ */
374
+ addPattern(pattern) {
375
+ this.patterns.push(pattern);
376
+ this.config.customPatterns.push(pattern);
377
+ }
378
+ /**
379
+ * Ignore a pattern by name
380
+ */
381
+ ignorePattern(name) {
382
+ this.config.ignoredPatterns.push(name);
383
+ this.patterns = this.patterns.filter((p) => p.name !== name);
384
+ }
385
+ /**
386
+ * Get scanning statistics
387
+ */
388
+ getStats() {
389
+ return {
390
+ ...this.stats,
391
+ patterns: this.patterns.length,
392
+ };
393
+ }
394
+ /**
395
+ * Reset statistics
396
+ */
397
+ resetStats() {
398
+ this.stats = {
399
+ scanned: 0,
400
+ secretsFound: 0,
401
+ blocked: 0,
402
+ redacted: 0,
403
+ };
404
+ }
405
+ /**
406
+ * Update configuration
407
+ */
408
+ updateConfig(config) {
409
+ this.config = { ...this.config, ...config };
410
+ }
411
+ /**
412
+ * Check if scanning is enabled
413
+ */
414
+ isEnabled() {
415
+ return this.config.enabled;
416
+ }
417
+ }
418
+ /**
419
+ * Global secrets scanner instance
420
+ */
421
+ let globalScanner = null;
422
+ /**
423
+ * Get or create the global secrets scanner
424
+ */
425
+ export function getSecretsScanner() {
426
+ if (!globalScanner) {
427
+ globalScanner = new SecretsScanner();
428
+ }
429
+ return globalScanner;
430
+ }
431
+ /**
432
+ * Convenience function to scan text for secrets
433
+ */
434
+ export function scanForSecrets(text) {
435
+ return getSecretsScanner().scan(text);
436
+ }
437
+ /**
438
+ * Convenience function to scan and redact secrets
439
+ */
440
+ export async function scanAndRedactSecrets(text) {
441
+ return getSecretsScanner().scanAndRedact(text);
442
+ }
443
+ //# sourceMappingURL=secrets-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets-scanner.js","sourceRoot":"","sources":["../../src/utils/secrets-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Secure Memory Utilities for NotebookLM MCP Server
3
+ *
4
+ * Provides secure handling of sensitive data in memory:
5
+ * - Zero-fill buffers and strings after use
6
+ * - Secure string class that auto-wipes
7
+ * - Memory-safe credential handling
8
+ *
9
+ * Why this matters:
10
+ * - Prevents memory dump attacks
11
+ * - Reduces credential exposure window
12
+ * - Mitigates cold boot attacks
13
+ *
14
+ * Added by Pantheon Security for hardened fork.
15
+ */
16
+ /**
17
+ * Securely zero-fill a Buffer
18
+ * Uses crypto.randomFill first to prevent compiler optimization removal
19
+ */
20
+ export declare function zeroBuffer(buffer: Buffer): void;
21
+ /**
22
+ * Securely zero-fill a Uint8Array
23
+ */
24
+ export declare function zeroUint8Array(arr: Uint8Array): void;
25
+ /**
26
+ * Create a secure string that can be wiped
27
+ * Note: JavaScript strings are immutable, so we use a Buffer internally
28
+ */
29
+ export declare class SecureString {
30
+ private buffer;
31
+ private wiped;
32
+ constructor(value: string);
33
+ /**
34
+ * Get the string value (creates new string each time)
35
+ */
36
+ toString(): string;
37
+ /**
38
+ * Get the underlying buffer (for crypto operations)
39
+ */
40
+ toBuffer(): Buffer;
41
+ /**
42
+ * Get length without exposing content
43
+ */
44
+ get length(): number;
45
+ /**
46
+ * Securely wipe the string from memory
47
+ */
48
+ wipe(): void;
49
+ /**
50
+ * Check if already wiped
51
+ */
52
+ isWiped(): boolean;
53
+ }
54
+ /**
55
+ * Secure credential holder with automatic wiping
56
+ */
57
+ export declare class SecureCredential {
58
+ private value;
59
+ private createdAt;
60
+ private maxAgeMs;
61
+ private autoWipeTimer?;
62
+ constructor(credential: string, maxAgeMs?: number);
63
+ /**
64
+ * Get the credential value
65
+ */
66
+ getValue(): string;
67
+ /**
68
+ * Check if credential has expired
69
+ */
70
+ isExpired(): boolean;
71
+ /**
72
+ * Get time remaining before auto-wipe (ms)
73
+ */
74
+ getTimeRemaining(): number;
75
+ /**
76
+ * Securely wipe the credential
77
+ */
78
+ wipe(): void;
79
+ /**
80
+ * Check if already wiped
81
+ */
82
+ isWiped(): boolean;
83
+ }
84
+ /**
85
+ * Secure object that wipes all string/buffer properties on dispose
86
+ */
87
+ export declare class SecureObject<T extends Record<string, unknown>> {
88
+ private data;
89
+ private disposed;
90
+ constructor(data: T);
91
+ /**
92
+ * Get a property value
93
+ */
94
+ get<K extends keyof T>(key: K): T[K];
95
+ /**
96
+ * Get all data (use carefully)
97
+ */
98
+ getData(): T;
99
+ /**
100
+ * Dispose and wipe all sensitive data
101
+ */
102
+ dispose(): void;
103
+ /**
104
+ * Check if disposed
105
+ */
106
+ isDisposed(): boolean;
107
+ }
108
+ /**
109
+ * Execute a function with a secure credential, auto-wiping after use
110
+ */
111
+ export declare function withSecureCredential<T>(credential: string, fn: (cred: SecureCredential) => Promise<T>): Promise<T>;
112
+ /**
113
+ * Execute a function with a secure buffer, auto-wiping after use
114
+ */
115
+ export declare function withSecureBuffer<T>(data: Buffer, fn: (buffer: Buffer) => Promise<T>): Promise<T>;
116
+ export declare function createSecureBuffer(size: number): Buffer;
117
+ export declare function createSecureBuffer(data: string, encoding?: BufferEncoding): Buffer;
118
+ /**
119
+ * Secure comparison to prevent timing attacks
120
+ */
121
+ export declare function secureCompare(a: string | Buffer, b: string | Buffer): boolean;
122
+ /**
123
+ * Generate a secure random string
124
+ */
125
+ export declare function secureRandomString(length: number, encoding?: BufferEncoding): string;
126
+ /**
127
+ * Mask sensitive data for logging (doesn't expose real length)
128
+ */
129
+ export declare function maskSensitive(value: string, showChars?: number): string;
130
+ //# sourceMappingURL=secure-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secure-memory.d.ts","sourceRoot":"","sources":["../../src/utils/secure-memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAO/C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CAMpD;AAED;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAkB;gBAEnB,KAAK,EAAE,MAAM;IAIzB;;OAEG;IACH,QAAQ,IAAI,MAAM;IAOlB;;OAEG;IACH,QAAQ,IAAI,MAAM;IAOlB;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;OAEG;IACH,IAAI,IAAI,IAAI;IAOZ;;OAEG;IACH,OAAO,IAAI,OAAO;CAGnB;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAC,CAAiB;gBAE3B,UAAU,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAe;IAWzD;;OAEG;IACH,QAAQ,IAAI,MAAM;IAQlB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAK1B;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;OAEG;IACH,OAAO,IAAI,OAAO;CAGnB;AAED;;GAEG;AACH,qBAAa,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACzD,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,QAAQ,CAAkB;gBAEtB,IAAI,EAAE,CAAC;IAInB;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAOpC;;OAEG;IACH,OAAO,IAAI,CAAC;IAOZ;;OAEG;IACH,OAAO,IAAI,IAAI;IAuBf;;OAEG;IACH,UAAU,IAAI,OAAO;CAGtB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,OAAO,CAAC,CAAC,CAAC,GACzC,OAAO,CAAC,CAAC,CAAC,CAOZ;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,CAAC,CAAC,CAMZ;AAUD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;AACzD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC;AAiBpF;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAW7E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,cAA4B,GAAG,MAAM,CAGjG;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,MAAU,GAAG,MAAM,CAK1E"}