@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,161 @@
1
+ /**
2
+ * Privacy Notice Text Content
3
+ *
4
+ * Contains the privacy notice content for display to users.
5
+ * Structured for GDPR compliance (Articles 13/14).
6
+ *
7
+ * Added by Pantheon Security for enterprise compliance support.
8
+ */
9
+ /**
10
+ * Current privacy notice version
11
+ */
12
+ export const PRIVACY_NOTICE_VERSION = "1.0.0";
13
+ /**
14
+ * Full privacy notice content
15
+ */
16
+ export const PRIVACY_NOTICE = {
17
+ version: PRIVACY_NOTICE_VERSION,
18
+ effective_date: "2025-01-01",
19
+ sections: {
20
+ data_controller: `Pantheon Security
21
+ Email: support@pantheonsecurity.io
22
+ Website: https://pantheonsecurity.io
23
+
24
+ This tool is designed for local use only. All data is processed and stored on your local device.`,
25
+ data_collected: [
26
+ "Browser session data (cookies, local storage) - Required for NotebookLM authentication",
27
+ "NotebookLM URLs and notebook metadata - Your saved notebook library",
28
+ "Query history within sessions - For contextual follow-up questions",
29
+ "Security audit logs - For security monitoring and compliance",
30
+ "User settings and preferences - Your configuration choices",
31
+ ],
32
+ purposes: [
33
+ "Service Provision - Enable access to NotebookLM through the MCP protocol",
34
+ "Session Management - Maintain your authenticated browser session",
35
+ "Security Logging - Detect and prevent unauthorized access",
36
+ "Error Diagnostics - Debug issues and improve the service",
37
+ ],
38
+ legal_basis: [
39
+ "Contract - Processing necessary to provide the service you requested",
40
+ "Legitimate Interest - Security logging and error diagnostics",
41
+ "Legal Obligation - Audit log retention for compliance (where applicable)",
42
+ ],
43
+ retention: `Data retention periods:
44
+ - Session data: Cleared after 24 hours or on logout
45
+ - Browser cookies: Encrypted and retained for service functionality
46
+ - Audit logs: 7 years (configurable, for regulatory compliance)
47
+ - Notebook library: Retained until you delete it
48
+ - Settings: Retained until you delete them`,
49
+ rights: [
50
+ "Access - Request a copy of all your personal data",
51
+ "Portability - Export your data in machine-readable format",
52
+ "Erasure - Request deletion of your personal data",
53
+ "Rectification - Correct inaccurate personal data",
54
+ "Objection - Object to processing based on legitimate interest",
55
+ "Restriction - Request limited processing of your data",
56
+ ],
57
+ contact: `For data protection inquiries:
58
+ Email: support@pantheonsecurity.io
59
+ GitHub: https://github.com/Pantheon-Security/notebooklm-mcp-secure`,
60
+ },
61
+ summary: `This tool processes data locally on your device to enable NotebookLM access via MCP.
62
+
63
+ What we collect:
64
+ - Browser session data (cookies, local storage)
65
+ - NotebookLM URLs and metadata
66
+ - Security audit logs
67
+
68
+ All data is:
69
+ - Stored locally only (no cloud sync)
70
+ - Encrypted with post-quantum cryptography
71
+ - Subject to automatic retention policies
72
+
73
+ Your rights: Access, Export, Erasure, Portability`,
74
+ };
75
+ /**
76
+ * CLI-formatted privacy notice for terminal display
77
+ */
78
+ export function getPrivacyNoticeCLI() {
79
+ const notice = PRIVACY_NOTICE;
80
+ const width = 68;
81
+ const border = "═".repeat(width);
82
+ return `
83
+ ╔${border}╗
84
+ ║${"PRIVACY NOTICE v" + notice.version}${" ".repeat(width - 18 - notice.version.length)}║
85
+ ╠${border}╣
86
+ ║${" ".repeat(width)}║
87
+ ║ This tool processes the following data locally on your device:${" ".repeat(width - 65)}║
88
+ ║${" ".repeat(width)}║
89
+ ║ • Browser session data (cookies, local storage)${" ".repeat(width - 51)}║
90
+ ║ • NotebookLM URLs and metadata${" ".repeat(width - 34)}║
91
+ ║ • Query history (for session context)${" ".repeat(width - 41)}║
92
+ ║ • Security audit logs${" ".repeat(width - 25)}║
93
+ ║${" ".repeat(width)}║
94
+ ║ All data is:${" ".repeat(width - 15)}║
95
+ ║ ✓ Stored locally only (no cloud sync)${" ".repeat(width - 41)}║
96
+ ║ ✓ Encrypted with post-quantum cryptography${" ".repeat(width - 46)}║
97
+ ║ ✓ Subject to automatic retention policies${" ".repeat(width - 44)}║
98
+ ║${" ".repeat(width)}║
99
+ ║ Your rights: Access, Export, Erasure, Portability${" ".repeat(width - 53)}║
100
+ ║${" ".repeat(width)}║
101
+ ║ Full policy: https://github.com/Pantheon-Security/...${" ".repeat(width - 57)}║
102
+ ║${" ".repeat(width)}║
103
+ ╠${border}╣
104
+ ║ By continuing, you acknowledge this privacy notice.${" ".repeat(width - 55)}║
105
+ ║${" ".repeat(width)}║
106
+ ║ [Press Enter to continue, or Ctrl+C to exit]${" ".repeat(width - 48)}║
107
+ ╚${border}╝
108
+ `;
109
+ }
110
+ /**
111
+ * Compact privacy notice for JSON responses
112
+ */
113
+ export function getPrivacyNoticeCompact() {
114
+ return {
115
+ version: PRIVACY_NOTICE.version,
116
+ summary: PRIVACY_NOTICE.summary,
117
+ data_collected: PRIVACY_NOTICE.sections.data_collected,
118
+ purposes: PRIVACY_NOTICE.sections.purposes,
119
+ rights: PRIVACY_NOTICE.sections.rights,
120
+ full_notice_url: process.env.NLMCP_PRIVACY_NOTICE_URL ||
121
+ "https://github.com/Pantheon-Security/notebooklm-mcp-secure/blob/main/SECURITY.md",
122
+ };
123
+ }
124
+ /**
125
+ * Get structured privacy notice for MCP tool response
126
+ */
127
+ export function getPrivacyNoticeStructured() {
128
+ return {
129
+ version: PRIVACY_NOTICE.version,
130
+ effective_date: PRIVACY_NOTICE.effective_date,
131
+ data_controller: PRIVACY_NOTICE.sections.data_controller,
132
+ data_collected: PRIVACY_NOTICE.sections.data_collected,
133
+ purposes: PRIVACY_NOTICE.sections.purposes,
134
+ legal_basis: PRIVACY_NOTICE.sections.legal_basis,
135
+ retention: PRIVACY_NOTICE.sections.retention,
136
+ rights: PRIVACY_NOTICE.sections.rights,
137
+ contact: PRIVACY_NOTICE.sections.contact,
138
+ };
139
+ }
140
+ /**
141
+ * Get data processing agreement summary
142
+ */
143
+ export function getProcessingAgreement() {
144
+ return {
145
+ version: PRIVACY_NOTICE.version,
146
+ processor: "Pantheon Security (local processing only)",
147
+ sub_processors: [
148
+ "None - All data is processed locally on your device",
149
+ ],
150
+ data_location: "Local device only (no cloud transfer)",
151
+ security_measures: [
152
+ "Post-quantum encryption (ML-KEM-768 + ChaCha20-Poly1305)",
153
+ "Certificate pinning for Google connections",
154
+ "Memory scrubbing for sensitive data",
155
+ "Tamper-evident audit logging",
156
+ "Secure file permissions",
157
+ ],
158
+ breach_notification: "In the unlikely event of a data breach, we will notify affected users within 72 hours as required by GDPR.",
159
+ };
160
+ }
161
+ //# sourceMappingURL=privacy-notice-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privacy-notice-text.js","sourceRoot":"","sources":["../../src/compliance/privacy-notice-text.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Privacy Notice Display Handler
3
+ *
4
+ * Manages display of privacy notice on first run and version updates.
5
+ * Tracks acknowledgment and integrates with consent management.
6
+ *
7
+ * Added by Pantheon Security for enterprise compliance support.
8
+ */
9
+ import { PRIVACY_NOTICE, getPrivacyNoticeCompact, getPrivacyNoticeStructured } from "./privacy-notice-text.js";
10
+ /**
11
+ * Privacy notice acknowledgment record
12
+ */
13
+ interface PrivacyNoticeAcknowledgment {
14
+ version: string;
15
+ acknowledged_at: string;
16
+ method: "cli" | "api" | "auto";
17
+ }
18
+ /**
19
+ * Privacy Notice Manager class
20
+ */
21
+ export declare class PrivacyNoticeManager {
22
+ private static instance;
23
+ private acknowledgmentFile;
24
+ private acknowledgments;
25
+ private loaded;
26
+ private constructor();
27
+ /**
28
+ * Get singleton instance
29
+ */
30
+ static getInstance(): PrivacyNoticeManager;
31
+ /**
32
+ * Load acknowledgments from storage
33
+ */
34
+ private load;
35
+ /**
36
+ * Save acknowledgments to storage
37
+ */
38
+ private save;
39
+ /**
40
+ * Check if privacy notice needs to be shown
41
+ */
42
+ needsDisplay(): Promise<boolean>;
43
+ /**
44
+ * Check if this is the first run ever
45
+ */
46
+ isFirstRun(): Promise<boolean>;
47
+ /**
48
+ * Get the CLI-formatted privacy notice
49
+ */
50
+ getCLINotice(): string;
51
+ /**
52
+ * Get compact privacy notice (for API responses)
53
+ */
54
+ getCompactNotice(): ReturnType<typeof getPrivacyNoticeCompact>;
55
+ /**
56
+ * Get structured privacy notice (full details)
57
+ */
58
+ getStructuredNotice(): ReturnType<typeof getPrivacyNoticeStructured>;
59
+ /**
60
+ * Get full privacy notice object
61
+ */
62
+ getFullNotice(): typeof PRIVACY_NOTICE;
63
+ /**
64
+ * Record acknowledgment of privacy notice
65
+ */
66
+ acknowledge(method?: "cli" | "api" | "auto"): Promise<void>;
67
+ /**
68
+ * Get acknowledgment history
69
+ */
70
+ getAcknowledgmentHistory(): Promise<PrivacyNoticeAcknowledgment[]>;
71
+ /**
72
+ * Get the current privacy notice version
73
+ */
74
+ getCurrentVersion(): string;
75
+ /**
76
+ * Check if a specific version has been acknowledged
77
+ */
78
+ hasAcknowledgedVersion(version: string): Promise<boolean>;
79
+ /**
80
+ * Get status summary
81
+ */
82
+ getStatus(): Promise<{
83
+ currentVersion: string;
84
+ needsDisplay: boolean;
85
+ isFirstRun: boolean;
86
+ acknowledgedVersions: string[];
87
+ lastAcknowledgment?: {
88
+ version: string;
89
+ acknowledged_at: string;
90
+ method: string;
91
+ };
92
+ }>;
93
+ /**
94
+ * Display privacy notice in console (for CLI use)
95
+ */
96
+ displayInConsole(): void;
97
+ /**
98
+ * Check and prompt for privacy notice if needed
99
+ * Returns true if acknowledged, false if user declined
100
+ */
101
+ checkAndPrompt(): Promise<boolean>;
102
+ /**
103
+ * Delete all acknowledgment records (for data erasure)
104
+ */
105
+ deleteAllRecords(): Promise<number>;
106
+ }
107
+ /**
108
+ * Get the privacy notice manager instance
109
+ */
110
+ export declare function getPrivacyNoticeManager(): PrivacyNoticeManager;
111
+ /**
112
+ * Check if privacy notice needs to be displayed
113
+ */
114
+ export declare function needsPrivacyNotice(): Promise<boolean>;
115
+ /**
116
+ * Acknowledge the privacy notice
117
+ */
118
+ export declare function acknowledgePrivacyNotice(method?: "cli" | "api" | "auto"): Promise<void>;
119
+ /**
120
+ * Get the privacy notice for display
121
+ */
122
+ export declare function getPrivacyNotice(): ReturnType<typeof getPrivacyNoticeStructured>;
123
+ /**
124
+ * Get CLI-formatted privacy notice
125
+ */
126
+ export declare function getPrivacyNoticeCLIText(): string;
127
+ export {};
128
+ //# sourceMappingURL=privacy-notice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privacy-notice.d.ts","sourceRoot":"","sources":["../../src/compliance/privacy-notice.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,EACL,cAAc,EAGd,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,0BAA0B,CAAC;AAElC;;GAEG;AACH,UAAU,2BAA2B;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAuB;IAC9C,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,MAAM,CAAkB;IAEhC,OAAO;IAKP;;OAEG;WACW,WAAW,IAAI,oBAAoB;IAOjD;;OAEG;YACW,IAAI;IAgBlB;;OAEG;YACW,IAAI;IAalB;;OAEG;IACU,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAW7C;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAK3C;;OAEG;IACI,YAAY,IAAI,MAAM;IAI7B;;OAEG;IACI,gBAAgB,IAAI,UAAU,CAAC,OAAO,uBAAuB,CAAC;IAIrE;;OAEG;IACI,mBAAmB,IAAI,UAAU,CAAC,OAAO,0BAA0B,CAAC;IAI3E;;OAEG;IACI,aAAa,IAAI,OAAO,cAAc;IAI7C;;OAEG;IACU,WAAW,CAAC,MAAM,GAAE,KAAK,GAAG,KAAK,GAAG,MAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC/E;;OAEG;IACU,wBAAwB,IAAI,OAAO,CAAC,2BAA2B,EAAE,CAAC;IAO/E;;OAEG;IACI,iBAAiB,IAAI,MAAM;IAIlC;;OAEG;IACU,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtE;;OAEG;IACU,SAAS,IAAI,OAAO,CAAC;QAChC,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,OAAO,CAAC;QACtB,UAAU,EAAE,OAAO,CAAC;QACpB,oBAAoB,EAAE,MAAM,EAAE,CAAC;QAC/B,kBAAkB,CAAC,EAAE;YACnB,OAAO,EAAE,MAAM,CAAC;YAChB,eAAe,EAAE,MAAM,CAAC;YACxB,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IAmBF;;OAEG;IACI,gBAAgB,IAAI,IAAI;IAI/B;;;OAGG;IACU,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IA0B/C;;OAEG;IACU,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;CAoBjD;AAMD;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,oBAAoB,CAE9D;AAMD;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAE3D;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,GAAE,KAAK,GAAG,KAAK,GAAG,MAAc,GACrC,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAEhF;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD"}
@@ -0,0 +1,250 @@
1
+ /**
2
+ * Privacy Notice Display Handler
3
+ *
4
+ * Manages display of privacy notice on first run and version updates.
5
+ * Tracks acknowledgment and integrates with consent management.
6
+ *
7
+ * Added by Pantheon Security for enterprise compliance support.
8
+ */
9
+ import path from "path";
10
+ import fs from "fs";
11
+ import { getConfig } from "../config.js";
12
+ import { writeFileSecure, mkdirSecure } from "../utils/file-permissions.js";
13
+ import { getConsentManager } from "./consent-manager.js";
14
+ import { getComplianceLogger } from "./compliance-logger.js";
15
+ import { PRIVACY_NOTICE, PRIVACY_NOTICE_VERSION, getPrivacyNoticeCLI, getPrivacyNoticeCompact, getPrivacyNoticeStructured, } from "./privacy-notice-text.js";
16
+ /**
17
+ * Privacy Notice Manager class
18
+ */
19
+ export class PrivacyNoticeManager {
20
+ static instance;
21
+ acknowledgmentFile;
22
+ acknowledgments = [];
23
+ loaded = false;
24
+ constructor() {
25
+ const config = getConfig();
26
+ this.acknowledgmentFile = path.join(config.configDir, "privacy-acknowledgment.json");
27
+ }
28
+ /**
29
+ * Get singleton instance
30
+ */
31
+ static getInstance() {
32
+ if (!PrivacyNoticeManager.instance) {
33
+ PrivacyNoticeManager.instance = new PrivacyNoticeManager();
34
+ }
35
+ return PrivacyNoticeManager.instance;
36
+ }
37
+ /**
38
+ * Load acknowledgments from storage
39
+ */
40
+ async load() {
41
+ if (this.loaded)
42
+ return;
43
+ try {
44
+ if (fs.existsSync(this.acknowledgmentFile)) {
45
+ const content = fs.readFileSync(this.acknowledgmentFile, "utf-8");
46
+ const data = JSON.parse(content);
47
+ this.acknowledgments = data.acknowledgments || [];
48
+ }
49
+ }
50
+ catch {
51
+ this.acknowledgments = [];
52
+ }
53
+ this.loaded = true;
54
+ }
55
+ /**
56
+ * Save acknowledgments to storage
57
+ */
58
+ async save() {
59
+ const dir = path.dirname(this.acknowledgmentFile);
60
+ mkdirSecure(dir);
61
+ const data = {
62
+ current_version: PRIVACY_NOTICE_VERSION,
63
+ acknowledgments: this.acknowledgments,
64
+ last_updated: new Date().toISOString(),
65
+ };
66
+ writeFileSecure(this.acknowledgmentFile, JSON.stringify(data, null, 2));
67
+ }
68
+ /**
69
+ * Check if privacy notice needs to be shown
70
+ */
71
+ async needsDisplay() {
72
+ await this.load();
73
+ // Check if current version has been acknowledged
74
+ const currentAck = this.acknowledgments.find(a => a.version === PRIVACY_NOTICE_VERSION);
75
+ return !currentAck;
76
+ }
77
+ /**
78
+ * Check if this is the first run ever
79
+ */
80
+ async isFirstRun() {
81
+ await this.load();
82
+ return this.acknowledgments.length === 0;
83
+ }
84
+ /**
85
+ * Get the CLI-formatted privacy notice
86
+ */
87
+ getCLINotice() {
88
+ return getPrivacyNoticeCLI();
89
+ }
90
+ /**
91
+ * Get compact privacy notice (for API responses)
92
+ */
93
+ getCompactNotice() {
94
+ return getPrivacyNoticeCompact();
95
+ }
96
+ /**
97
+ * Get structured privacy notice (full details)
98
+ */
99
+ getStructuredNotice() {
100
+ return getPrivacyNoticeStructured();
101
+ }
102
+ /**
103
+ * Get full privacy notice object
104
+ */
105
+ getFullNotice() {
106
+ return PRIVACY_NOTICE;
107
+ }
108
+ /**
109
+ * Record acknowledgment of privacy notice
110
+ */
111
+ async acknowledge(method = "cli") {
112
+ await this.load();
113
+ const acknowledgment = {
114
+ version: PRIVACY_NOTICE_VERSION,
115
+ acknowledged_at: new Date().toISOString(),
116
+ method,
117
+ };
118
+ this.acknowledgments.push(acknowledgment);
119
+ await this.save();
120
+ // Also record consent
121
+ const consentManager = getConsentManager();
122
+ await consentManager.acknowledgePrivacyNotice();
123
+ // Log the acknowledgment
124
+ const logger = getComplianceLogger();
125
+ await logger.log("consent", "privacy_notice_acknowledged", { type: "user" }, "success", {
126
+ details: {
127
+ version: PRIVACY_NOTICE_VERSION,
128
+ method,
129
+ },
130
+ });
131
+ }
132
+ /**
133
+ * Get acknowledgment history
134
+ */
135
+ async getAcknowledgmentHistory() {
136
+ await this.load();
137
+ return [...this.acknowledgments].sort((a, b) => new Date(b.acknowledged_at).getTime() - new Date(a.acknowledged_at).getTime());
138
+ }
139
+ /**
140
+ * Get the current privacy notice version
141
+ */
142
+ getCurrentVersion() {
143
+ return PRIVACY_NOTICE_VERSION;
144
+ }
145
+ /**
146
+ * Check if a specific version has been acknowledged
147
+ */
148
+ async hasAcknowledgedVersion(version) {
149
+ await this.load();
150
+ return this.acknowledgments.some(a => a.version === version);
151
+ }
152
+ /**
153
+ * Get status summary
154
+ */
155
+ async getStatus() {
156
+ await this.load();
157
+ const history = await this.getAcknowledgmentHistory();
158
+ const lastAck = history[0];
159
+ return {
160
+ currentVersion: PRIVACY_NOTICE_VERSION,
161
+ needsDisplay: await this.needsDisplay(),
162
+ isFirstRun: await this.isFirstRun(),
163
+ acknowledgedVersions: [...new Set(this.acknowledgments.map(a => a.version))],
164
+ lastAcknowledgment: lastAck ? {
165
+ version: lastAck.version,
166
+ acknowledged_at: lastAck.acknowledged_at,
167
+ method: lastAck.method,
168
+ } : undefined,
169
+ };
170
+ }
171
+ /**
172
+ * Display privacy notice in console (for CLI use)
173
+ */
174
+ displayInConsole() {
175
+ console.log(this.getCLINotice());
176
+ }
177
+ /**
178
+ * Check and prompt for privacy notice if needed
179
+ * Returns true if acknowledged, false if user declined
180
+ */
181
+ async checkAndPrompt() {
182
+ const needs = await this.needsDisplay();
183
+ if (!needs) {
184
+ return true; // Already acknowledged
185
+ }
186
+ // In non-interactive mode, auto-acknowledge with warning
187
+ if (!process.stdin.isTTY) {
188
+ console.warn("[Privacy Notice] Running in non-interactive mode. " +
189
+ "Privacy notice auto-acknowledged. Version: " + PRIVACY_NOTICE_VERSION);
190
+ await this.acknowledge("auto");
191
+ return true;
192
+ }
193
+ // Display notice
194
+ this.displayInConsole();
195
+ // In a real CLI, we'd wait for input here
196
+ // For MCP server use, the notice is informational
197
+ await this.acknowledge("cli");
198
+ return true;
199
+ }
200
+ /**
201
+ * Delete all acknowledgment records (for data erasure)
202
+ */
203
+ async deleteAllRecords() {
204
+ await this.load();
205
+ const count = this.acknowledgments.length;
206
+ // Log before deletion
207
+ const logger = getComplianceLogger();
208
+ await logger.logDataDeletion({ type: "user" }, "privacy_acknowledgments", count, true, { action: "erasure_request" });
209
+ this.acknowledgments = [];
210
+ await this.save();
211
+ return count;
212
+ }
213
+ }
214
+ // ============================================
215
+ // SINGLETON ACCESS
216
+ // ============================================
217
+ /**
218
+ * Get the privacy notice manager instance
219
+ */
220
+ export function getPrivacyNoticeManager() {
221
+ return PrivacyNoticeManager.getInstance();
222
+ }
223
+ // ============================================
224
+ // CONVENIENCE EXPORTS
225
+ // ============================================
226
+ /**
227
+ * Check if privacy notice needs to be displayed
228
+ */
229
+ export async function needsPrivacyNotice() {
230
+ return getPrivacyNoticeManager().needsDisplay();
231
+ }
232
+ /**
233
+ * Acknowledge the privacy notice
234
+ */
235
+ export async function acknowledgePrivacyNotice(method = "cli") {
236
+ return getPrivacyNoticeManager().acknowledge(method);
237
+ }
238
+ /**
239
+ * Get the privacy notice for display
240
+ */
241
+ export function getPrivacyNotice() {
242
+ return getPrivacyNoticeManager().getStructuredNotice();
243
+ }
244
+ /**
245
+ * Get CLI-formatted privacy notice
246
+ */
247
+ export function getPrivacyNoticeCLIText() {
248
+ return getPrivacyNoticeManager().getCLINotice();
249
+ }
250
+ //# sourceMappingURL=privacy-notice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privacy-notice.js","sourceRoot":"","sources":["../../src/compliance/privacy-notice.ts"],"names":[],"mappings":"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"}