@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,361 @@
1
+ /**
2
+ * Audit Logger for NotebookLM MCP Server
3
+ *
4
+ * Provides comprehensive audit logging with:
5
+ * - Tool invocation logging
6
+ * - Authentication event logging
7
+ * - Session lifecycle logging
8
+ * - Security event logging
9
+ * - Tamper detection via hash chaining
10
+ * - Log rotation and retention
11
+ *
12
+ * Added by Pantheon Security for hardened fork.
13
+ */
14
+ import fs from "fs";
15
+ import path from "path";
16
+ import crypto from "crypto";
17
+ import { CONFIG } from "../config.js";
18
+ import { sanitizeForLogging } from "./security.js";
19
+ /**
20
+ * Get audit configuration from environment
21
+ */
22
+ function getAuditConfig() {
23
+ return {
24
+ enabled: process.env.NLMCP_AUDIT_ENABLED !== "false",
25
+ logDir: process.env.NLMCP_AUDIT_DIR || path.join(CONFIG.dataDir, "audit"),
26
+ retentionDays: parseInt(process.env.NLMCP_AUDIT_RETENTION_DAYS || "30", 10),
27
+ includeDetails: process.env.NLMCP_AUDIT_INCLUDE_DETAILS !== "false",
28
+ hashChainEnabled: process.env.NLMCP_AUDIT_HASH_CHAIN !== "false",
29
+ };
30
+ }
31
+ /**
32
+ * Audit Logger Class
33
+ *
34
+ * Thread-safe audit logging with hash chain integrity verification.
35
+ */
36
+ export class AuditLogger {
37
+ config;
38
+ currentLogFile = "";
39
+ previousHash = "GENESIS";
40
+ writeQueue = [];
41
+ isWriting = false;
42
+ stats = {
43
+ totalEvents: 0,
44
+ toolEvents: 0,
45
+ authEvents: 0,
46
+ sessionEvents: 0,
47
+ securityEvents: 0,
48
+ systemEvents: 0,
49
+ };
50
+ constructor(config) {
51
+ this.config = { ...getAuditConfig(), ...config };
52
+ if (this.config.enabled) {
53
+ this.ensureLogDirectory();
54
+ this.initializeLogFile();
55
+ this.cleanOldLogs();
56
+ }
57
+ }
58
+ /**
59
+ * Ensure audit log directory exists
60
+ */
61
+ ensureLogDirectory() {
62
+ if (!fs.existsSync(this.config.logDir)) {
63
+ fs.mkdirSync(this.config.logDir, { recursive: true, mode: 0o700 });
64
+ }
65
+ }
66
+ /**
67
+ * Initialize log file for today
68
+ */
69
+ initializeLogFile() {
70
+ const today = new Date().toISOString().split("T")[0];
71
+ this.currentLogFile = path.join(this.config.logDir, `audit-${today}.jsonl`);
72
+ // Read last hash from existing file if present
73
+ if (fs.existsSync(this.currentLogFile)) {
74
+ try {
75
+ const content = fs.readFileSync(this.currentLogFile, "utf-8");
76
+ const lines = content.trim().split("\n").filter(l => l.length > 0);
77
+ if (lines.length > 0) {
78
+ const lastEvent = JSON.parse(lines[lines.length - 1]);
79
+ this.previousHash = lastEvent.hash;
80
+ }
81
+ }
82
+ catch {
83
+ // Start fresh if file is corrupted
84
+ this.previousHash = "GENESIS";
85
+ }
86
+ }
87
+ }
88
+ /**
89
+ * Clean up old log files based on retention policy
90
+ */
91
+ cleanOldLogs() {
92
+ try {
93
+ const files = fs.readdirSync(this.config.logDir);
94
+ const cutoffDate = new Date();
95
+ cutoffDate.setDate(cutoffDate.getDate() - this.config.retentionDays);
96
+ for (const file of files) {
97
+ if (!file.startsWith("audit-") || !file.endsWith(".jsonl"))
98
+ continue;
99
+ // Extract date from filename (audit-YYYY-MM-DD.jsonl)
100
+ const dateStr = file.slice(6, 16);
101
+ const fileDate = new Date(dateStr);
102
+ if (fileDate < cutoffDate) {
103
+ fs.unlinkSync(path.join(this.config.logDir, file));
104
+ }
105
+ }
106
+ }
107
+ catch {
108
+ // Ignore cleanup errors
109
+ }
110
+ }
111
+ /**
112
+ * Compute hash for an event (includes previous hash for chaining)
113
+ */
114
+ computeHash(event) {
115
+ const data = JSON.stringify({
116
+ timestamp: event.timestamp,
117
+ eventType: event.eventType,
118
+ eventName: event.eventName,
119
+ success: event.success,
120
+ duration_ms: event.duration_ms,
121
+ details: event.details,
122
+ previousHash: event.previousHash,
123
+ });
124
+ return crypto.createHash("sha256").update(data).digest("hex").slice(0, 16);
125
+ }
126
+ /**
127
+ * Sanitize details object for logging (remove sensitive data)
128
+ */
129
+ sanitizeDetails(details) {
130
+ const sanitized = {};
131
+ for (const [key, value] of Object.entries(details)) {
132
+ // Skip sensitive keys entirely
133
+ if (/password|secret|token|key|credential|auth/i.test(key)) {
134
+ sanitized[key] = "[REDACTED]";
135
+ continue;
136
+ }
137
+ // Sanitize string values
138
+ if (typeof value === "string") {
139
+ sanitized[key] = sanitizeForLogging(value);
140
+ }
141
+ else if (typeof value === "object" && value !== null) {
142
+ // Recursively sanitize objects
143
+ sanitized[key] = this.sanitizeDetails(value);
144
+ }
145
+ else {
146
+ sanitized[key] = value;
147
+ }
148
+ }
149
+ return sanitized;
150
+ }
151
+ /**
152
+ * Write event to log file
153
+ */
154
+ async writeEvent(event) {
155
+ this.writeQueue.push(event);
156
+ if (this.isWriting)
157
+ return;
158
+ this.isWriting = true;
159
+ try {
160
+ while (this.writeQueue.length > 0) {
161
+ const batch = this.writeQueue.splice(0, 100); // Write up to 100 events at once
162
+ const lines = batch.map(e => JSON.stringify(e)).join("\n") + "\n";
163
+ // Check if we need to rotate to new day's file
164
+ const today = new Date().toISOString().split("T")[0];
165
+ const expectedFile = path.join(this.config.logDir, `audit-${today}.jsonl`);
166
+ if (this.currentLogFile !== expectedFile) {
167
+ this.currentLogFile = expectedFile;
168
+ }
169
+ fs.appendFileSync(this.currentLogFile, lines, { mode: 0o600 });
170
+ }
171
+ }
172
+ finally {
173
+ this.isWriting = false;
174
+ }
175
+ }
176
+ /**
177
+ * Log a generic event
178
+ */
179
+ async log(eventType, eventName, success, details = {}, duration_ms) {
180
+ if (!this.config.enabled)
181
+ return;
182
+ // Update stats
183
+ this.stats.totalEvents++;
184
+ this.stats[`${eventType}Events`]++;
185
+ const sanitizedDetails = this.config.includeDetails
186
+ ? this.sanitizeDetails(details)
187
+ : {};
188
+ const eventWithoutHash = {
189
+ timestamp: new Date().toISOString(),
190
+ eventType,
191
+ eventName,
192
+ success,
193
+ duration_ms,
194
+ details: sanitizedDetails,
195
+ previousHash: this.config.hashChainEnabled ? this.previousHash : "",
196
+ };
197
+ const hash = this.config.hashChainEnabled
198
+ ? this.computeHash(eventWithoutHash)
199
+ : "";
200
+ const event = {
201
+ ...eventWithoutHash,
202
+ hash,
203
+ };
204
+ if (this.config.hashChainEnabled) {
205
+ this.previousHash = hash;
206
+ }
207
+ await this.writeEvent(event);
208
+ }
209
+ // ============================================================================
210
+ // Public Logging Methods
211
+ // ============================================================================
212
+ /**
213
+ * Log a tool invocation
214
+ */
215
+ async logToolCall(toolName, args, success, duration_ms, error) {
216
+ await this.log("tool", toolName, success, {
217
+ args_summary: this.summarizeArgs(args),
218
+ error: error ? sanitizeForLogging(error) : undefined,
219
+ }, duration_ms);
220
+ }
221
+ /**
222
+ * Log an authentication event
223
+ */
224
+ async logAuthEvent(eventName, success, details = {}) {
225
+ await this.log("auth", eventName, success, details);
226
+ }
227
+ /**
228
+ * Log a session lifecycle event
229
+ */
230
+ async logSessionEvent(eventName, sessionId, details = {}) {
231
+ await this.log("session", eventName, true, {
232
+ session_id: sessionId,
233
+ ...details,
234
+ });
235
+ }
236
+ /**
237
+ * Log a security event
238
+ */
239
+ async logSecurityEvent(eventName, severity, details = {}) {
240
+ const success = severity === "info";
241
+ await this.log("security", eventName, success, {
242
+ severity,
243
+ ...details,
244
+ });
245
+ }
246
+ /**
247
+ * Log a system event
248
+ */
249
+ async logSystemEvent(eventName, details = {}) {
250
+ await this.log("system", eventName, true, details);
251
+ }
252
+ // ============================================================================
253
+ // Helper Methods
254
+ // ============================================================================
255
+ /**
256
+ * Summarize tool arguments (avoid logging full content)
257
+ */
258
+ summarizeArgs(args) {
259
+ const summary = {};
260
+ for (const [key, value] of Object.entries(args)) {
261
+ if (typeof value === "string") {
262
+ // Log length for long strings, actual value for short ones
263
+ if (value.length > 100) {
264
+ summary[key] = `[string, ${value.length} chars]`;
265
+ }
266
+ else {
267
+ summary[key] = sanitizeForLogging(value);
268
+ }
269
+ }
270
+ else if (Array.isArray(value)) {
271
+ summary[key] = `[array, ${value.length} items]`;
272
+ }
273
+ else if (typeof value === "object" && value !== null) {
274
+ summary[key] = `[object]`;
275
+ }
276
+ else {
277
+ summary[key] = value;
278
+ }
279
+ }
280
+ return summary;
281
+ }
282
+ /**
283
+ * Get audit statistics
284
+ */
285
+ getStats() {
286
+ return { ...this.stats };
287
+ }
288
+ /**
289
+ * Verify integrity of audit log file
290
+ */
291
+ async verifyIntegrity(logFile) {
292
+ const file = logFile || this.currentLogFile;
293
+ const errors = [];
294
+ if (!fs.existsSync(file)) {
295
+ return { valid: false, errors: ["Log file does not exist"] };
296
+ }
297
+ try {
298
+ const content = fs.readFileSync(file, "utf-8");
299
+ const lines = content.trim().split("\n").filter(l => l.length > 0);
300
+ let expectedPreviousHash = "GENESIS";
301
+ for (let i = 0; i < lines.length; i++) {
302
+ try {
303
+ const event = JSON.parse(lines[i]);
304
+ // Verify hash chain
305
+ if (this.config.hashChainEnabled) {
306
+ if (event.previousHash !== expectedPreviousHash) {
307
+ errors.push(`Line ${i + 1}: Hash chain broken. Expected previous hash ${expectedPreviousHash}, got ${event.previousHash}`);
308
+ }
309
+ // Recompute hash to verify
310
+ const { hash, ...eventWithoutHash } = event;
311
+ const computedHash = this.computeHash(eventWithoutHash);
312
+ if (computedHash !== hash) {
313
+ errors.push(`Line ${i + 1}: Hash mismatch. Event may have been tampered.`);
314
+ }
315
+ expectedPreviousHash = event.hash;
316
+ }
317
+ }
318
+ catch (e) {
319
+ errors.push(`Line ${i + 1}: Invalid JSON`);
320
+ }
321
+ }
322
+ return { valid: errors.length === 0, errors };
323
+ }
324
+ catch (e) {
325
+ return { valid: false, errors: [`Failed to read log file: ${e}`] };
326
+ }
327
+ }
328
+ /**
329
+ * Force flush any pending writes
330
+ */
331
+ async flush() {
332
+ // Wait for any pending writes to complete
333
+ while (this.isWriting || this.writeQueue.length > 0) {
334
+ await new Promise(resolve => setTimeout(resolve, 10));
335
+ }
336
+ }
337
+ }
338
+ /**
339
+ * Global audit logger instance
340
+ */
341
+ let globalAuditLogger = null;
342
+ /**
343
+ * Get or create the global audit logger
344
+ */
345
+ export function getAuditLogger() {
346
+ if (!globalAuditLogger) {
347
+ globalAuditLogger = new AuditLogger();
348
+ }
349
+ return globalAuditLogger;
350
+ }
351
+ /**
352
+ * Convenience functions for quick logging
353
+ */
354
+ export const audit = {
355
+ tool: (name, args, success, duration_ms, error) => getAuditLogger().logToolCall(name, args, success, duration_ms, error),
356
+ auth: (event, success, details) => getAuditLogger().logAuthEvent(event, success, details),
357
+ session: (event, sessionId, details) => getAuditLogger().logSessionEvent(event, sessionId, details),
358
+ security: (event, severity, details) => getAuditLogger().logSecurityEvent(event, severity, details),
359
+ system: (event, details) => getAuditLogger().logSystemEvent(event, details),
360
+ };
361
+ //# sourceMappingURL=audit-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-logger.js","sourceRoot":"","sources":["../../src/utils/audit-logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Certificate Pinning for NotebookLM MCP Server
3
+ *
4
+ * Provides certificate pinning for HTTPS connections:
5
+ * - Pin Google's root CA certificates
6
+ * - Detect MITM attacks
7
+ * - Validate certificate chains
8
+ *
9
+ * Why this matters:
10
+ * - Prevents man-in-the-middle attacks
11
+ * - Protects against rogue CA certificates
12
+ * - Ensures only Google's real servers are trusted
13
+ *
14
+ * Added by Pantheon Security for hardened fork.
15
+ */
16
+ import https from "https";
17
+ import tls from "tls";
18
+ /**
19
+ * Configuration for certificate pinning
20
+ */
21
+ export interface CertPinningConfig {
22
+ /** Enable certificate pinning (default: true) */
23
+ enabled: boolean;
24
+ /** Allow connections to fail open if pinning fails (default: false for security) */
25
+ failOpen: boolean;
26
+ /** Report-only mode - log but don't block (default: false) */
27
+ reportOnly: boolean;
28
+ /** Additional pinned certificates (SPKI hashes) */
29
+ additionalPins: Record<string, string[]>;
30
+ }
31
+ /**
32
+ * Calculate SPKI hash for a certificate
33
+ */
34
+ export declare function calculateSPKIHash(cert: tls.PeerCertificate): string;
35
+ /**
36
+ * Get all SPKI hashes from a certificate chain
37
+ */
38
+ export declare function getCertificateChainHashes(socket: tls.TLSSocket): string[];
39
+ /**
40
+ * Validate a certificate chain against pinned certificates
41
+ */
42
+ export declare function validateCertificatePin(hostname: string, chainHashes: string[], config?: CertPinningConfig): {
43
+ valid: boolean;
44
+ matchedPin?: string;
45
+ error?: string;
46
+ };
47
+ /**
48
+ * Certificate Pinning Manager
49
+ */
50
+ export declare class CertificatePinningManager {
51
+ private config;
52
+ private violationCount;
53
+ private lastViolation?;
54
+ constructor(config?: Partial<CertPinningConfig>);
55
+ /**
56
+ * Check if pinning is enabled
57
+ */
58
+ isEnabled(): boolean;
59
+ /**
60
+ * Validate a TLS connection
61
+ */
62
+ validateConnection(socket: tls.TLSSocket, hostname: string): Promise<boolean>;
63
+ /**
64
+ * Create an HTTPS agent with certificate pinning
65
+ */
66
+ createPinnedAgent(_hostname: string): https.Agent;
67
+ /**
68
+ * Get violation statistics
69
+ */
70
+ getStats(): {
71
+ enabled: boolean;
72
+ reportOnly: boolean;
73
+ violationCount: number;
74
+ lastViolation?: {
75
+ hostname: string;
76
+ timestamp: Date;
77
+ };
78
+ };
79
+ /**
80
+ * Update configuration
81
+ */
82
+ updateConfig(config: Partial<CertPinningConfig>): void;
83
+ /**
84
+ * Add a custom pin for a hostname
85
+ */
86
+ addPin(hostname: string, spkiHash: string): void;
87
+ }
88
+ /**
89
+ * Get or create the global pinning manager
90
+ */
91
+ export declare function getCertificatePinningManager(): CertificatePinningManager;
92
+ /**
93
+ * Utility to extract and display certificate pins from a hostname
94
+ * Useful for updating pinned certificates
95
+ */
96
+ export declare function extractCertificatePins(hostname: string): Promise<string[]>;
97
+ //# sourceMappingURL=cert-pinning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cert-pinning.d.ts","sourceRoot":"","sources":["../../src/utils/cert-pinning.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAmDtB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,oFAAoF;IACpF,QAAQ,EAAE,OAAO,CAAC;IAClB,8DAA8D;IAC9D,UAAU,EAAE,OAAO,CAAC;IACpB,mDAAmD;IACnD,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC1C;AAcD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,eAAe,GAAG,MAAM,CAUnE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,GAAG,MAAM,EAAE,CA8BzE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EAAE,EACrB,MAAM,GAAE,iBAAsC,GAC7C;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA0BzD;AA8BD;;GAEG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,aAAa,CAAC,CAIpB;gBAEU,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAI/C;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACG,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA+CnF;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC,KAAK;IA8BjD;;OAEG;IACH,QAAQ,IAAI;QACV,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,OAAO,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,CAAC,EAAE;YACd,QAAQ,EAAE,MAAM,CAAC;YACjB,SAAS,EAAE,IAAI,CAAC;SACjB,CAAC;KACH;IAcD;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAItD;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;CAQjD;AAOD;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,yBAAyB,CAKxE;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA0BhF"}