@pan-sec/notebooklm-mcp 1.4.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/README.md +61 -7
  2. package/SECURITY.md +40 -6
  3. package/dist/auth/mcp-auth.d.ts.map +1 -1
  4. package/dist/auth/mcp-auth.js +3 -6
  5. package/dist/auth/mcp-auth.js.map +1 -1
  6. package/dist/compliance/alert-manager.d.ts +120 -0
  7. package/dist/compliance/alert-manager.d.ts.map +1 -0
  8. package/dist/compliance/alert-manager.js +420 -0
  9. package/dist/compliance/alert-manager.js.map +1 -0
  10. package/dist/compliance/breach-detection.d.ts +134 -0
  11. package/dist/compliance/breach-detection.d.ts.map +1 -0
  12. package/dist/compliance/breach-detection.js +456 -0
  13. package/dist/compliance/breach-detection.js.map +1 -0
  14. package/dist/compliance/change-log.d.ts +113 -0
  15. package/dist/compliance/change-log.d.ts.map +1 -0
  16. package/dist/compliance/change-log.js +275 -0
  17. package/dist/compliance/change-log.js.map +1 -0
  18. package/dist/compliance/compliance-logger.d.ts +136 -0
  19. package/dist/compliance/compliance-logger.d.ts.map +1 -0
  20. package/dist/compliance/compliance-logger.js +425 -0
  21. package/dist/compliance/compliance-logger.js.map +1 -0
  22. package/dist/compliance/compliance-tools.d.ts +18 -0
  23. package/dist/compliance/compliance-tools.d.ts.map +1 -0
  24. package/dist/compliance/compliance-tools.js +673 -0
  25. package/dist/compliance/compliance-tools.js.map +1 -0
  26. package/dist/compliance/consent-manager.d.ts +130 -0
  27. package/dist/compliance/consent-manager.d.ts.map +1 -0
  28. package/dist/compliance/consent-manager.js +386 -0
  29. package/dist/compliance/consent-manager.js.map +1 -0
  30. package/dist/compliance/dashboard.d.ts +243 -0
  31. package/dist/compliance/dashboard.d.ts.map +1 -0
  32. package/dist/compliance/dashboard.js +519 -0
  33. package/dist/compliance/dashboard.js.map +1 -0
  34. package/dist/compliance/data-classification.d.ts +117 -0
  35. package/dist/compliance/data-classification.d.ts.map +1 -0
  36. package/dist/compliance/data-classification.js +469 -0
  37. package/dist/compliance/data-classification.js.map +1 -0
  38. package/dist/compliance/data-erasure.d.ts +110 -0
  39. package/dist/compliance/data-erasure.d.ts.map +1 -0
  40. package/dist/compliance/data-erasure.js +501 -0
  41. package/dist/compliance/data-erasure.js.map +1 -0
  42. package/dist/compliance/data-export.d.ts +85 -0
  43. package/dist/compliance/data-export.d.ts.map +1 -0
  44. package/dist/compliance/data-export.js +394 -0
  45. package/dist/compliance/data-export.js.map +1 -0
  46. package/dist/compliance/data-inventory.d.ts +136 -0
  47. package/dist/compliance/data-inventory.d.ts.map +1 -0
  48. package/dist/compliance/data-inventory.js +335 -0
  49. package/dist/compliance/data-inventory.js.map +1 -0
  50. package/dist/compliance/dsar-handler.d.ts +123 -0
  51. package/dist/compliance/dsar-handler.d.ts.map +1 -0
  52. package/dist/compliance/dsar-handler.js +371 -0
  53. package/dist/compliance/dsar-handler.js.map +1 -0
  54. package/dist/compliance/evidence-collector.d.ts +187 -0
  55. package/dist/compliance/evidence-collector.d.ts.map +1 -0
  56. package/dist/compliance/evidence-collector.js +656 -0
  57. package/dist/compliance/evidence-collector.js.map +1 -0
  58. package/dist/compliance/health-monitor.d.ts +111 -0
  59. package/dist/compliance/health-monitor.d.ts.map +1 -0
  60. package/dist/compliance/health-monitor.js +509 -0
  61. package/dist/compliance/health-monitor.js.map +1 -0
  62. package/dist/compliance/incident-manager.d.ts +131 -0
  63. package/dist/compliance/incident-manager.d.ts.map +1 -0
  64. package/dist/compliance/incident-manager.js +418 -0
  65. package/dist/compliance/incident-manager.js.map +1 -0
  66. package/dist/compliance/index.d.ts +32 -0
  67. package/dist/compliance/index.d.ts.map +1 -0
  68. package/dist/compliance/index.js +35 -0
  69. package/dist/compliance/index.js.map +1 -0
  70. package/dist/compliance/policy-docs.d.ts +108 -0
  71. package/dist/compliance/policy-docs.d.ts.map +1 -0
  72. package/dist/compliance/policy-docs.js +464 -0
  73. package/dist/compliance/policy-docs.js.map +1 -0
  74. package/dist/compliance/privacy-notice-text.d.ts +58 -0
  75. package/dist/compliance/privacy-notice-text.d.ts.map +1 -0
  76. package/dist/compliance/privacy-notice-text.js +161 -0
  77. package/dist/compliance/privacy-notice-text.js.map +1 -0
  78. package/dist/compliance/privacy-notice.d.ts +128 -0
  79. package/dist/compliance/privacy-notice.d.ts.map +1 -0
  80. package/dist/compliance/privacy-notice.js +250 -0
  81. package/dist/compliance/privacy-notice.js.map +1 -0
  82. package/dist/compliance/report-generator.d.ts +168 -0
  83. package/dist/compliance/report-generator.d.ts.map +1 -0
  84. package/dist/compliance/report-generator.js +830 -0
  85. package/dist/compliance/report-generator.js.map +1 -0
  86. package/dist/compliance/retention-engine.d.ts +130 -0
  87. package/dist/compliance/retention-engine.d.ts.map +1 -0
  88. package/dist/compliance/retention-engine.js +510 -0
  89. package/dist/compliance/retention-engine.js.map +1 -0
  90. package/dist/compliance/siem-exporter.d.ts +150 -0
  91. package/dist/compliance/siem-exporter.d.ts.map +1 -0
  92. package/dist/compliance/siem-exporter.js +509 -0
  93. package/dist/compliance/siem-exporter.js.map +1 -0
  94. package/dist/compliance/types.d.ts +601 -0
  95. package/dist/compliance/types.d.ts.map +1 -0
  96. package/dist/compliance/types.js +22 -0
  97. package/dist/compliance/types.js.map +1 -0
  98. package/dist/config.d.ts +4 -0
  99. package/dist/config.d.ts.map +1 -1
  100. package/dist/config.js +8 -1
  101. package/dist/config.js.map +1 -1
  102. package/dist/events/event-emitter.d.ts +45 -0
  103. package/dist/events/event-emitter.d.ts.map +1 -0
  104. package/dist/events/event-emitter.js +100 -0
  105. package/dist/events/event-emitter.js.map +1 -0
  106. package/dist/events/event-types.d.ts +124 -0
  107. package/dist/events/event-types.d.ts.map +1 -0
  108. package/dist/events/event-types.js +18 -0
  109. package/dist/events/event-types.js.map +1 -0
  110. package/dist/index.js +59 -2
  111. package/dist/index.js.map +1 -1
  112. package/dist/library/notebook-library.d.ts +25 -2
  113. package/dist/library/notebook-library.d.ts.map +1 -1
  114. package/dist/library/notebook-library.js +144 -3
  115. package/dist/library/notebook-library.js.map +1 -1
  116. package/dist/library/types.d.ts +15 -0
  117. package/dist/library/types.d.ts.map +1 -1
  118. package/dist/notebook-creation/audio-manager.d.ts +56 -0
  119. package/dist/notebook-creation/audio-manager.d.ts.map +1 -0
  120. package/dist/notebook-creation/audio-manager.js +335 -0
  121. package/dist/notebook-creation/audio-manager.js.map +1 -0
  122. package/dist/notebook-creation/discover-creation-flow.d.ts +8 -0
  123. package/dist/notebook-creation/discover-creation-flow.d.ts.map +1 -0
  124. package/dist/notebook-creation/discover-creation-flow.js +177 -0
  125. package/dist/notebook-creation/discover-creation-flow.js.map +1 -0
  126. package/dist/notebook-creation/discover-quota.d.ts +8 -0
  127. package/dist/notebook-creation/discover-quota.d.ts.map +1 -0
  128. package/dist/notebook-creation/discover-quota.js +195 -0
  129. package/dist/notebook-creation/discover-quota.js.map +1 -0
  130. package/dist/notebook-creation/discover-source-dialog.d.ts +8 -0
  131. package/dist/notebook-creation/discover-source-dialog.d.ts.map +1 -0
  132. package/dist/notebook-creation/discover-source-dialog.js +134 -0
  133. package/dist/notebook-creation/discover-source-dialog.js.map +1 -0
  134. package/dist/notebook-creation/discover-sources.d.ts +8 -0
  135. package/dist/notebook-creation/discover-sources.d.ts.map +1 -0
  136. package/dist/notebook-creation/discover-sources.js +273 -0
  137. package/dist/notebook-creation/discover-sources.js.map +1 -0
  138. package/dist/notebook-creation/discover-text-input.d.ts +7 -0
  139. package/dist/notebook-creation/discover-text-input.d.ts.map +1 -0
  140. package/dist/notebook-creation/discover-text-input.js +135 -0
  141. package/dist/notebook-creation/discover-text-input.js.map +1 -0
  142. package/dist/notebook-creation/index.d.ts +12 -0
  143. package/dist/notebook-creation/index.d.ts.map +1 -0
  144. package/dist/notebook-creation/index.js +12 -0
  145. package/dist/notebook-creation/index.js.map +1 -0
  146. package/dist/notebook-creation/notebook-creator.d.ts +95 -0
  147. package/dist/notebook-creation/notebook-creator.d.ts.map +1 -0
  148. package/dist/notebook-creation/notebook-creator.js +689 -0
  149. package/dist/notebook-creation/notebook-creator.js.map +1 -0
  150. package/dist/notebook-creation/notebook-sync.d.ts +93 -0
  151. package/dist/notebook-creation/notebook-sync.d.ts.map +1 -0
  152. package/dist/notebook-creation/notebook-sync.js +370 -0
  153. package/dist/notebook-creation/notebook-sync.js.map +1 -0
  154. package/dist/notebook-creation/run-discovery.d.ts +11 -0
  155. package/dist/notebook-creation/run-discovery.d.ts.map +1 -0
  156. package/dist/notebook-creation/run-discovery.js +151 -0
  157. package/dist/notebook-creation/run-discovery.js.map +1 -0
  158. package/dist/notebook-creation/selector-discovery.d.ts +65 -0
  159. package/dist/notebook-creation/selector-discovery.d.ts.map +1 -0
  160. package/dist/notebook-creation/selector-discovery.js +421 -0
  161. package/dist/notebook-creation/selector-discovery.js.map +1 -0
  162. package/dist/notebook-creation/selectors.d.ts +150 -0
  163. package/dist/notebook-creation/selectors.d.ts.map +1 -0
  164. package/dist/notebook-creation/selectors.js +225 -0
  165. package/dist/notebook-creation/selectors.js.map +1 -0
  166. package/dist/notebook-creation/source-manager.d.ts +73 -0
  167. package/dist/notebook-creation/source-manager.d.ts.map +1 -0
  168. package/dist/notebook-creation/source-manager.js +486 -0
  169. package/dist/notebook-creation/source-manager.js.map +1 -0
  170. package/dist/notebook-creation/test-create.d.ts +8 -0
  171. package/dist/notebook-creation/test-create.d.ts.map +1 -0
  172. package/dist/notebook-creation/test-create.js +72 -0
  173. package/dist/notebook-creation/test-create.js.map +1 -0
  174. package/dist/notebook-creation/types.d.ts +173 -0
  175. package/dist/notebook-creation/types.d.ts.map +1 -0
  176. package/dist/notebook-creation/types.js +5 -0
  177. package/dist/notebook-creation/types.js.map +1 -0
  178. package/dist/quota/index.d.ts +8 -0
  179. package/dist/quota/index.d.ts.map +1 -0
  180. package/dist/quota/index.js +8 -0
  181. package/dist/quota/index.js.map +1 -0
  182. package/dist/quota/quota-manager.d.ts +125 -0
  183. package/dist/quota/quota-manager.d.ts.map +1 -0
  184. package/dist/quota/quota-manager.js +330 -0
  185. package/dist/quota/quota-manager.js.map +1 -0
  186. package/dist/session/session-manager.d.ts +5 -0
  187. package/dist/session/session-manager.d.ts.map +1 -1
  188. package/dist/session/session-manager.js +6 -0
  189. package/dist/session/session-manager.js.map +1 -1
  190. package/dist/session/shared-context-manager.d.ts.map +1 -1
  191. package/dist/session/shared-context-manager.js +2 -1
  192. package/dist/session/shared-context-manager.js.map +1 -1
  193. package/dist/tools/definitions/notebook-management.d.ts.map +1 -1
  194. package/dist/tools/definitions/notebook-management.js +525 -0
  195. package/dist/tools/definitions/notebook-management.js.map +1 -1
  196. package/dist/tools/definitions/system.d.ts.map +1 -1
  197. package/dist/tools/definitions/system.js +158 -0
  198. package/dist/tools/definitions/system.js.map +1 -1
  199. package/dist/tools/handlers.d.ts +225 -0
  200. package/dist/tools/handlers.d.ts.map +1 -1
  201. package/dist/tools/handlers.js +911 -0
  202. package/dist/tools/handlers.js.map +1 -1
  203. package/dist/utils/audit-logger.d.ts +21 -1
  204. package/dist/utils/audit-logger.d.ts.map +1 -1
  205. package/dist/utils/audit-logger.js +53 -4
  206. package/dist/utils/audit-logger.js.map +1 -1
  207. package/dist/utils/crypto.d.ts.map +1 -1
  208. package/dist/utils/crypto.js +8 -15
  209. package/dist/utils/crypto.js.map +1 -1
  210. package/dist/utils/file-permissions.d.ts +85 -0
  211. package/dist/utils/file-permissions.d.ts.map +1 -0
  212. package/dist/utils/file-permissions.js +180 -0
  213. package/dist/utils/file-permissions.js.map +1 -0
  214. package/dist/utils/settings-manager.d.ts.map +1 -1
  215. package/dist/utils/settings-manager.js +6 -11
  216. package/dist/utils/settings-manager.js.map +1 -1
  217. package/dist/webhooks/index.d.ts +8 -0
  218. package/dist/webhooks/index.d.ts.map +1 -0
  219. package/dist/webhooks/index.js +8 -0
  220. package/dist/webhooks/index.js.map +1 -0
  221. package/dist/webhooks/types.d.ts +57 -0
  222. package/dist/webhooks/types.d.ts.map +1 -0
  223. package/dist/webhooks/types.js +5 -0
  224. package/dist/webhooks/types.js.map +1 -0
  225. package/dist/webhooks/webhook-dispatcher.d.ts +120 -0
  226. package/dist/webhooks/webhook-dispatcher.d.ts.map +1 -0
  227. package/dist/webhooks/webhook-dispatcher.js +519 -0
  228. package/dist/webhooks/webhook-dispatcher.js.map +1 -0
  229. package/docs/COMPLIANCE-SPEC.md +1452 -0
  230. package/package.json +30 -4
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Health Monitor
3
+ *
4
+ * Monitors system health and availability.
5
+ * Implements SOC2 availability and monitoring requirements.
6
+ *
7
+ * Added by Pantheon Security for enterprise compliance support.
8
+ */
9
+ import type { HealthMetrics, ComponentHealth } from "./types.js";
10
+ /**
11
+ * Health Monitor class
12
+ */
13
+ export declare class HealthMonitor {
14
+ private static instance;
15
+ private startTime;
16
+ private enabled;
17
+ private checkIntervalSeconds;
18
+ private checkTimer;
19
+ private lastMetrics;
20
+ private checks;
21
+ private constructor();
22
+ /**
23
+ * Get singleton instance
24
+ */
25
+ static getInstance(): HealthMonitor;
26
+ /**
27
+ * Initialize health checks
28
+ */
29
+ private initializeChecks;
30
+ /**
31
+ * Start periodic health monitoring
32
+ */
33
+ private startMonitoring;
34
+ /**
35
+ * Stop health monitoring
36
+ */
37
+ stop(): void;
38
+ /**
39
+ * Run full health check
40
+ */
41
+ runHealthCheck(): Promise<HealthMetrics>;
42
+ /**
43
+ * Check data directory health
44
+ */
45
+ private checkDataDirectory;
46
+ /**
47
+ * Check config directory health
48
+ */
49
+ private checkConfigDirectory;
50
+ /**
51
+ * Check audit logging health
52
+ */
53
+ private checkAuditLogging;
54
+ /**
55
+ * Check compliance logging health
56
+ */
57
+ private checkComplianceLogging;
58
+ /**
59
+ * Check encryption health
60
+ */
61
+ private checkEncryption;
62
+ /**
63
+ * Get resource metrics
64
+ */
65
+ private getResourceMetrics;
66
+ /**
67
+ * Get security status
68
+ */
69
+ private getSecurityStatus;
70
+ /**
71
+ * Get compliance status
72
+ */
73
+ private getComplianceStatus;
74
+ /**
75
+ * Get last health metrics
76
+ */
77
+ getLastMetrics(): HealthMetrics | null;
78
+ /**
79
+ * Get current status (quick check without full health run)
80
+ */
81
+ getStatus(): {
82
+ status: "healthy" | "degraded" | "unhealthy" | "unknown";
83
+ uptime_seconds: number;
84
+ last_check?: string;
85
+ };
86
+ /**
87
+ * Register a custom health check
88
+ */
89
+ registerCheck(name: string, check: () => Promise<ComponentHealth>): void;
90
+ /**
91
+ * Get uptime in human-readable format
92
+ */
93
+ getUptimeFormatted(): string;
94
+ }
95
+ /**
96
+ * Get the health monitor instance
97
+ */
98
+ export declare function getHealthMonitor(): HealthMonitor;
99
+ /**
100
+ * Run a health check
101
+ */
102
+ export declare function runHealthCheck(): Promise<HealthMetrics>;
103
+ /**
104
+ * Get current health status
105
+ */
106
+ export declare function getHealthStatus(): ReturnType<HealthMonitor["getStatus"]>;
107
+ /**
108
+ * Get last health metrics
109
+ */
110
+ export declare function getLastHealthMetrics(): HealthMetrics | null;
111
+ //# sourceMappingURL=health-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-monitor.d.ts","sourceRoot":"","sources":["../../src/compliance/health-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EAIhB,MAAM,YAAY,CAAC;AAUpB;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,MAAM,CAAqB;IAEnC,OAAO;IAeP;;OAEG;WACW,WAAW,IAAI,aAAa;IAO1C;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyBxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACI,IAAI,IAAI,IAAI;IAOnB;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,aAAa,CAAC;IAwFrD;;OAEG;YACW,kBAAkB;IAmChC;;OAEG;YACW,oBAAoB;IAiClC;;OAEG;YACW,iBAAiB;IAqD/B;;OAEG;YACW,sBAAsB;IA2CpC;;OAEG;YACW,eAAe;IA0C7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;YACW,iBAAiB;IAmB/B;;OAEG;YACW,mBAAmB;IA6BjC;;OAEG;IACI,cAAc,IAAI,aAAa,GAAG,IAAI;IAI7C;;OAEG;IACI,SAAS,IAAI;QAClB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;QACzD,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB;IAeD;;OAEG;IACI,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAI/E;;OAEG;IACI,kBAAkB,IAAI,MAAM;CAepC;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD;AAMD;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,aAAa,CAAC,CAE7D;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAExE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,aAAa,GAAG,IAAI,CAE3D"}
@@ -0,0 +1,509 @@
1
+ /**
2
+ * Health Monitor
3
+ *
4
+ * Monitors system health and availability.
5
+ * Implements SOC2 availability and monitoring requirements.
6
+ *
7
+ * Added by Pantheon Security for enterprise compliance support.
8
+ */
9
+ import os from "os";
10
+ import fs from "fs";
11
+ import path from "path";
12
+ import { getConfig } from "../config.js";
13
+ import { getComplianceLogger } from "./compliance-logger.js";
14
+ import { getConsentManager } from "./consent-manager.js";
15
+ import { getRetentionEngine } from "./retention-engine.js";
16
+ import { getIncidentManager } from "./incident-manager.js";
17
+ import { getAlertManager } from "./alert-manager.js";
18
+ /**
19
+ * Health Monitor class
20
+ */
21
+ export class HealthMonitor {
22
+ static instance;
23
+ startTime;
24
+ enabled;
25
+ checkIntervalSeconds;
26
+ checkTimer = null;
27
+ lastMetrics = null;
28
+ checks = [];
29
+ constructor() {
30
+ this.startTime = Date.now();
31
+ this.enabled = process.env.NLMCP_HEALTH_MONITORING !== "false";
32
+ this.checkIntervalSeconds = parseInt(process.env.NLMCP_HEALTH_CHECK_INTERVAL || "60", 10);
33
+ this.initializeChecks();
34
+ if (this.enabled) {
35
+ this.startMonitoring();
36
+ }
37
+ }
38
+ /**
39
+ * Get singleton instance
40
+ */
41
+ static getInstance() {
42
+ if (!HealthMonitor.instance) {
43
+ HealthMonitor.instance = new HealthMonitor();
44
+ }
45
+ return HealthMonitor.instance;
46
+ }
47
+ /**
48
+ * Initialize health checks
49
+ */
50
+ initializeChecks() {
51
+ this.checks = [
52
+ {
53
+ name: "data_directory",
54
+ check: () => this.checkDataDirectory(),
55
+ },
56
+ {
57
+ name: "config_directory",
58
+ check: () => this.checkConfigDirectory(),
59
+ },
60
+ {
61
+ name: "audit_logging",
62
+ check: () => this.checkAuditLogging(),
63
+ },
64
+ {
65
+ name: "compliance_logging",
66
+ check: () => this.checkComplianceLogging(),
67
+ },
68
+ {
69
+ name: "encryption",
70
+ check: () => this.checkEncryption(),
71
+ },
72
+ ];
73
+ }
74
+ /**
75
+ * Start periodic health monitoring
76
+ */
77
+ startMonitoring() {
78
+ if (this.checkTimer) {
79
+ clearInterval(this.checkTimer);
80
+ }
81
+ // Run initial check
82
+ this.runHealthCheck().catch(() => { });
83
+ // Schedule periodic checks
84
+ this.checkTimer = setInterval(() => {
85
+ this.runHealthCheck().catch(() => { });
86
+ }, this.checkIntervalSeconds * 1000);
87
+ }
88
+ /**
89
+ * Stop health monitoring
90
+ */
91
+ stop() {
92
+ if (this.checkTimer) {
93
+ clearInterval(this.checkTimer);
94
+ this.checkTimer = null;
95
+ }
96
+ }
97
+ /**
98
+ * Run full health check
99
+ */
100
+ async runHealthCheck() {
101
+ const startTime = Date.now();
102
+ // Run all component checks
103
+ const componentResults = await Promise.all(this.checks.map(async (check) => {
104
+ try {
105
+ return await check.check();
106
+ }
107
+ catch (error) {
108
+ return {
109
+ name: check.name,
110
+ status: "down",
111
+ last_check: new Date().toISOString(),
112
+ error: error instanceof Error ? error.message : String(error),
113
+ };
114
+ }
115
+ }));
116
+ // Get resource metrics
117
+ const resources = this.getResourceMetrics();
118
+ // Get security status
119
+ const security = await this.getSecurityStatus();
120
+ // Get compliance status
121
+ const compliance = await this.getComplianceStatus();
122
+ // Determine overall status
123
+ const hasDown = componentResults.some(c => c.status === "down");
124
+ const hasDegraded = componentResults.some(c => c.status === "degraded");
125
+ let overallStatus;
126
+ if (hasDown) {
127
+ overallStatus = "unhealthy";
128
+ }
129
+ else if (hasDegraded) {
130
+ overallStatus = "degraded";
131
+ }
132
+ else {
133
+ overallStatus = "healthy";
134
+ }
135
+ const metrics = {
136
+ timestamp: new Date().toISOString(),
137
+ status: overallStatus,
138
+ uptime_seconds: Math.floor((Date.now() - this.startTime) / 1000),
139
+ components: componentResults,
140
+ resources,
141
+ security,
142
+ compliance,
143
+ };
144
+ this.lastMetrics = metrics;
145
+ // Alert if unhealthy
146
+ if (overallStatus === "unhealthy") {
147
+ const alertManager = getAlertManager();
148
+ const downComponents = componentResults
149
+ .filter(c => c.status === "down")
150
+ .map(c => c.name);
151
+ await alertManager.sendAlert("error", "System Health Degraded", `The following components are down: ${downComponents.join(", ")}`, "health-monitor", { components: downComponents });
152
+ }
153
+ // Log health check
154
+ const logger = getComplianceLogger();
155
+ await logger.log("data_processing", "health_check_completed", { type: "system" }, "success", {
156
+ details: {
157
+ status: overallStatus,
158
+ duration_ms: Date.now() - startTime,
159
+ components_checked: componentResults.length,
160
+ },
161
+ });
162
+ return metrics;
163
+ }
164
+ /**
165
+ * Check data directory health
166
+ */
167
+ async checkDataDirectory() {
168
+ const startTime = Date.now();
169
+ const config = getConfig();
170
+ try {
171
+ if (!fs.existsSync(config.dataDir)) {
172
+ return {
173
+ name: "data_directory",
174
+ status: "down",
175
+ last_check: new Date().toISOString(),
176
+ error: "Data directory does not exist",
177
+ };
178
+ }
179
+ // Check if writable
180
+ const testFile = path.join(config.dataDir, ".health_check");
181
+ fs.writeFileSync(testFile, "test");
182
+ fs.unlinkSync(testFile);
183
+ return {
184
+ name: "data_directory",
185
+ status: "up",
186
+ last_check: new Date().toISOString(),
187
+ response_time_ms: Date.now() - startTime,
188
+ };
189
+ }
190
+ catch (error) {
191
+ return {
192
+ name: "data_directory",
193
+ status: "down",
194
+ last_check: new Date().toISOString(),
195
+ error: error instanceof Error ? error.message : String(error),
196
+ };
197
+ }
198
+ }
199
+ /**
200
+ * Check config directory health
201
+ */
202
+ async checkConfigDirectory() {
203
+ const startTime = Date.now();
204
+ const config = getConfig();
205
+ try {
206
+ if (!fs.existsSync(config.configDir)) {
207
+ return {
208
+ name: "config_directory",
209
+ status: "down",
210
+ last_check: new Date().toISOString(),
211
+ error: "Config directory does not exist",
212
+ };
213
+ }
214
+ // Check if readable
215
+ fs.readdirSync(config.configDir);
216
+ return {
217
+ name: "config_directory",
218
+ status: "up",
219
+ last_check: new Date().toISOString(),
220
+ response_time_ms: Date.now() - startTime,
221
+ };
222
+ }
223
+ catch (error) {
224
+ return {
225
+ name: "config_directory",
226
+ status: "down",
227
+ last_check: new Date().toISOString(),
228
+ error: error instanceof Error ? error.message : String(error),
229
+ };
230
+ }
231
+ }
232
+ /**
233
+ * Check audit logging health
234
+ */
235
+ async checkAuditLogging() {
236
+ const startTime = Date.now();
237
+ const config = getConfig();
238
+ try {
239
+ const auditDir = path.join(config.dataDir, "audit");
240
+ if (!fs.existsSync(auditDir)) {
241
+ // Not an error if audit is disabled
242
+ if (process.env.NLMCP_AUDIT_ENABLED === "false") {
243
+ return {
244
+ name: "audit_logging",
245
+ status: "up",
246
+ last_check: new Date().toISOString(),
247
+ response_time_ms: Date.now() - startTime,
248
+ };
249
+ }
250
+ return {
251
+ name: "audit_logging",
252
+ status: "degraded",
253
+ last_check: new Date().toISOString(),
254
+ error: "Audit directory not yet created",
255
+ };
256
+ }
257
+ // Check for recent log files
258
+ const files = fs.readdirSync(auditDir).filter(f => f.endsWith(".jsonl"));
259
+ if (files.length === 0) {
260
+ return {
261
+ name: "audit_logging",
262
+ status: "degraded",
263
+ last_check: new Date().toISOString(),
264
+ error: "No audit log files found",
265
+ };
266
+ }
267
+ return {
268
+ name: "audit_logging",
269
+ status: "up",
270
+ last_check: new Date().toISOString(),
271
+ response_time_ms: Date.now() - startTime,
272
+ };
273
+ }
274
+ catch (error) {
275
+ return {
276
+ name: "audit_logging",
277
+ status: "down",
278
+ last_check: new Date().toISOString(),
279
+ error: error instanceof Error ? error.message : String(error),
280
+ };
281
+ }
282
+ }
283
+ /**
284
+ * Check compliance logging health
285
+ */
286
+ async checkComplianceLogging() {
287
+ const startTime = Date.now();
288
+ try {
289
+ const logger = getComplianceLogger();
290
+ const stats = await logger.getStats();
291
+ if (!stats.enabled) {
292
+ return {
293
+ name: "compliance_logging",
294
+ status: "up",
295
+ last_check: new Date().toISOString(),
296
+ response_time_ms: Date.now() - startTime,
297
+ };
298
+ }
299
+ // Verify integrity
300
+ const integrity = await logger.verifyIntegrity();
301
+ if (!integrity.valid) {
302
+ return {
303
+ name: "compliance_logging",
304
+ status: "degraded",
305
+ last_check: new Date().toISOString(),
306
+ error: "Integrity verification failed",
307
+ };
308
+ }
309
+ return {
310
+ name: "compliance_logging",
311
+ status: "up",
312
+ last_check: new Date().toISOString(),
313
+ response_time_ms: Date.now() - startTime,
314
+ };
315
+ }
316
+ catch (error) {
317
+ return {
318
+ name: "compliance_logging",
319
+ status: "down",
320
+ last_check: new Date().toISOString(),
321
+ error: error instanceof Error ? error.message : String(error),
322
+ };
323
+ }
324
+ }
325
+ /**
326
+ * Check encryption health
327
+ */
328
+ async checkEncryption() {
329
+ const startTime = Date.now();
330
+ const config = getConfig();
331
+ try {
332
+ // Check if encryption is enabled
333
+ if (process.env.NLMCP_ENCRYPTION_ENABLED === "false") {
334
+ return {
335
+ name: "encryption",
336
+ status: "degraded",
337
+ last_check: new Date().toISOString(),
338
+ error: "Encryption is disabled",
339
+ };
340
+ }
341
+ // Check for PQ keys
342
+ const keysPath = path.join(config.dataDir, "pq-keys.enc");
343
+ if (!fs.existsSync(keysPath)) {
344
+ return {
345
+ name: "encryption",
346
+ status: "degraded",
347
+ last_check: new Date().toISOString(),
348
+ error: "Post-quantum keys not yet generated",
349
+ };
350
+ }
351
+ return {
352
+ name: "encryption",
353
+ status: "up",
354
+ last_check: new Date().toISOString(),
355
+ response_time_ms: Date.now() - startTime,
356
+ };
357
+ }
358
+ catch (error) {
359
+ return {
360
+ name: "encryption",
361
+ status: "down",
362
+ last_check: new Date().toISOString(),
363
+ error: error instanceof Error ? error.message : String(error),
364
+ };
365
+ }
366
+ }
367
+ /**
368
+ * Get resource metrics
369
+ */
370
+ getResourceMetrics() {
371
+ const memUsage = process.memoryUsage();
372
+ const totalMem = os.totalmem();
373
+ const freeMem = os.freemem();
374
+ return {
375
+ memory_used_mb: Math.round(memUsage.heapUsed / 1024 / 1024),
376
+ memory_limit_mb: Math.round(memUsage.heapTotal / 1024 / 1024),
377
+ disk_used_mb: Math.round((totalMem - freeMem) / 1024 / 1024),
378
+ disk_available_mb: Math.round(freeMem / 1024 / 1024),
379
+ };
380
+ }
381
+ /**
382
+ * Get security status
383
+ */
384
+ async getSecurityStatus() {
385
+ let openIncidents = 0;
386
+ try {
387
+ const incidentManager = getIncidentManager();
388
+ const incidents = await incidentManager.getOpenIncidents();
389
+ openIncidents = incidents.length;
390
+ }
391
+ catch {
392
+ // Ignore errors
393
+ }
394
+ return {
395
+ encryption_enabled: process.env.NLMCP_ENCRYPTION_ENABLED !== "false",
396
+ auth_enabled: process.env.NLMCP_AUTH_ENABLED === "true",
397
+ cert_pinning_enabled: process.env.NLMCP_CERT_PINNING !== "false",
398
+ open_incidents: openIncidents,
399
+ };
400
+ }
401
+ /**
402
+ * Get compliance status
403
+ */
404
+ async getComplianceStatus() {
405
+ let consentValid = true;
406
+ let activePolicies = 0;
407
+ let pendingErasures = 0;
408
+ try {
409
+ const consentManager = getConsentManager();
410
+ const validation = await consentManager.validateConsents();
411
+ consentValid = validation.valid;
412
+ }
413
+ catch {
414
+ // Ignore errors
415
+ }
416
+ try {
417
+ const retentionEngine = getRetentionEngine();
418
+ const policies = await retentionEngine.getPolicies();
419
+ activePolicies = policies.length;
420
+ }
421
+ catch {
422
+ // Ignore errors
423
+ }
424
+ return {
425
+ consent_valid: consentValid,
426
+ retention_policies_active: activePolicies,
427
+ pending_erasure_requests: pendingErasures,
428
+ last_compliance_check: new Date().toISOString(),
429
+ };
430
+ }
431
+ /**
432
+ * Get last health metrics
433
+ */
434
+ getLastMetrics() {
435
+ return this.lastMetrics;
436
+ }
437
+ /**
438
+ * Get current status (quick check without full health run)
439
+ */
440
+ getStatus() {
441
+ if (!this.lastMetrics) {
442
+ return {
443
+ status: "unknown",
444
+ uptime_seconds: Math.floor((Date.now() - this.startTime) / 1000),
445
+ };
446
+ }
447
+ return {
448
+ status: this.lastMetrics.status,
449
+ uptime_seconds: Math.floor((Date.now() - this.startTime) / 1000),
450
+ last_check: this.lastMetrics.timestamp,
451
+ };
452
+ }
453
+ /**
454
+ * Register a custom health check
455
+ */
456
+ registerCheck(name, check) {
457
+ this.checks.push({ name, check });
458
+ }
459
+ /**
460
+ * Get uptime in human-readable format
461
+ */
462
+ getUptimeFormatted() {
463
+ const seconds = Math.floor((Date.now() - this.startTime) / 1000);
464
+ const days = Math.floor(seconds / 86400);
465
+ const hours = Math.floor((seconds % 86400) / 3600);
466
+ const minutes = Math.floor((seconds % 3600) / 60);
467
+ const secs = seconds % 60;
468
+ const parts = [];
469
+ if (days > 0)
470
+ parts.push(`${days}d`);
471
+ if (hours > 0)
472
+ parts.push(`${hours}h`);
473
+ if (minutes > 0)
474
+ parts.push(`${minutes}m`);
475
+ parts.push(`${secs}s`);
476
+ return parts.join(" ");
477
+ }
478
+ }
479
+ // ============================================
480
+ // SINGLETON ACCESS
481
+ // ============================================
482
+ /**
483
+ * Get the health monitor instance
484
+ */
485
+ export function getHealthMonitor() {
486
+ return HealthMonitor.getInstance();
487
+ }
488
+ // ============================================
489
+ // CONVENIENCE EXPORTS
490
+ // ============================================
491
+ /**
492
+ * Run a health check
493
+ */
494
+ export async function runHealthCheck() {
495
+ return getHealthMonitor().runHealthCheck();
496
+ }
497
+ /**
498
+ * Get current health status
499
+ */
500
+ export function getHealthStatus() {
501
+ return getHealthMonitor().getStatus();
502
+ }
503
+ /**
504
+ * Get last health metrics
505
+ */
506
+ export function getLastHealthMetrics() {
507
+ return getHealthMonitor().getLastMetrics();
508
+ }
509
+ //# sourceMappingURL=health-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-monitor.js","sourceRoot":"","sources":["../../src/compliance/health-monitor.ts"],"names":[],"mappings":"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"}