couchloop-eq-mcp 1.0.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 (222) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +358 -0
  3. package/assets/logo/README.md +12 -0
  4. package/assets/logo/couchloop_EQ-IconLogo.png +0 -0
  5. package/dist/auth/middleware.d.ts +8 -0
  6. package/dist/auth/middleware.d.ts.map +1 -0
  7. package/dist/auth/middleware.js +59 -0
  8. package/dist/auth/middleware.js.map +1 -0
  9. package/dist/clients/shrinkChatClient.d.ts +195 -0
  10. package/dist/clients/shrinkChatClient.d.ts.map +1 -0
  11. package/dist/clients/shrinkChatClient.js +349 -0
  12. package/dist/clients/shrinkChatClient.js.map +1 -0
  13. package/dist/db/client.d.ts +23 -0
  14. package/dist/db/client.d.ts.map +1 -0
  15. package/dist/db/client.js +78 -0
  16. package/dist/db/client.js.map +1 -0
  17. package/dist/db/migrate.d.ts +4 -0
  18. package/dist/db/migrate.d.ts.map +1 -0
  19. package/dist/db/migrate.js +34 -0
  20. package/dist/db/migrate.js.map +1 -0
  21. package/dist/db/migrations/schema.d.ts +1074 -0
  22. package/dist/db/migrations/schema.d.ts.map +1 -0
  23. package/dist/db/migrations/schema.js +160 -0
  24. package/dist/db/migrations/schema.js.map +1 -0
  25. package/dist/db/schema.d.ts +1213 -0
  26. package/dist/db/schema.d.ts.map +1 -0
  27. package/dist/db/schema.js +157 -0
  28. package/dist/db/schema.js.map +1 -0
  29. package/dist/db/seed.d.ts +4 -0
  30. package/dist/db/seed.d.ts.map +1 -0
  31. package/dist/db/seed.js +57 -0
  32. package/dist/db/seed.js.map +1 -0
  33. package/dist/db/seedOAuth.d.ts +4 -0
  34. package/dist/db/seedOAuth.d.ts.map +1 -0
  35. package/dist/db/seedOAuth.js +76 -0
  36. package/dist/db/seedOAuth.js.map +1 -0
  37. package/dist/index.d.ts +3 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +93 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/resources/index.d.ts +11 -0
  42. package/dist/resources/index.d.ts.map +1 -0
  43. package/dist/resources/index.js +56 -0
  44. package/dist/resources/index.js.map +1 -0
  45. package/dist/resources/journey-status.d.ts +2 -0
  46. package/dist/resources/journey-status.d.ts.map +1 -0
  47. package/dist/resources/journey-status.js +42 -0
  48. package/dist/resources/journey-status.js.map +1 -0
  49. package/dist/resources/session-summary.d.ts +2 -0
  50. package/dist/resources/session-summary.d.ts.map +1 -0
  51. package/dist/resources/session-summary.js +85 -0
  52. package/dist/resources/session-summary.js.map +1 -0
  53. package/dist/resources/user-context.d.ts +2 -0
  54. package/dist/resources/user-context.d.ts.map +1 -0
  55. package/dist/resources/user-context.js +79 -0
  56. package/dist/resources/user-context.js.map +1 -0
  57. package/dist/server/index.d.ts +3 -0
  58. package/dist/server/index.d.ts.map +1 -0
  59. package/dist/server/index.js +385 -0
  60. package/dist/server/index.js.map +1 -0
  61. package/dist/server/middleware/auth.d.ts +30 -0
  62. package/dist/server/middleware/auth.d.ts.map +1 -0
  63. package/dist/server/middleware/auth.js +157 -0
  64. package/dist/server/middleware/auth.js.map +1 -0
  65. package/dist/server/oauth/anomalyDetection.d.ts +146 -0
  66. package/dist/server/oauth/anomalyDetection.d.ts.map +1 -0
  67. package/dist/server/oauth/anomalyDetection.js +405 -0
  68. package/dist/server/oauth/anomalyDetection.js.map +1 -0
  69. package/dist/server/oauth/authServer.d.ts +61 -0
  70. package/dist/server/oauth/authServer.d.ts.map +1 -0
  71. package/dist/server/oauth/authServer.js +283 -0
  72. package/dist/server/oauth/authServer.js.map +1 -0
  73. package/dist/server/oauth/dpop.d.ts +135 -0
  74. package/dist/server/oauth/dpop.d.ts.map +1 -0
  75. package/dist/server/oauth/dpop.js +338 -0
  76. package/dist/server/oauth/dpop.js.map +1 -0
  77. package/dist/server/oauth/gdpr/consent.d.ts +173 -0
  78. package/dist/server/oauth/gdpr/consent.d.ts.map +1 -0
  79. package/dist/server/oauth/gdpr/consent.js +388 -0
  80. package/dist/server/oauth/gdpr/consent.js.map +1 -0
  81. package/dist/server/oauth/gdpr/dataPortability.d.ts +214 -0
  82. package/dist/server/oauth/gdpr/dataPortability.d.ts.map +1 -0
  83. package/dist/server/oauth/gdpr/dataPortability.js +486 -0
  84. package/dist/server/oauth/gdpr/dataPortability.js.map +1 -0
  85. package/dist/server/oauth/gdpr/index.d.ts +103 -0
  86. package/dist/server/oauth/gdpr/index.d.ts.map +1 -0
  87. package/dist/server/oauth/gdpr/index.js +273 -0
  88. package/dist/server/oauth/gdpr/index.js.map +1 -0
  89. package/dist/server/oauth/gdpr/rightToErasure.d.ts +184 -0
  90. package/dist/server/oauth/gdpr/rightToErasure.d.ts.map +1 -0
  91. package/dist/server/oauth/gdpr/rightToErasure.js +527 -0
  92. package/dist/server/oauth/gdpr/rightToErasure.js.map +1 -0
  93. package/dist/server/oauth/monitoring/securityMonitor.d.ts +218 -0
  94. package/dist/server/oauth/monitoring/securityMonitor.d.ts.map +1 -0
  95. package/dist/server/oauth/monitoring/securityMonitor.js +615 -0
  96. package/dist/server/oauth/monitoring/securityMonitor.js.map +1 -0
  97. package/dist/server/oauth/pkce.d.ts +61 -0
  98. package/dist/server/oauth/pkce.d.ts.map +1 -0
  99. package/dist/server/oauth/pkce.js +157 -0
  100. package/dist/server/oauth/pkce.js.map +1 -0
  101. package/dist/server/oauth/providers/base.d.ts +147 -0
  102. package/dist/server/oauth/providers/base.d.ts.map +1 -0
  103. package/dist/server/oauth/providers/base.js +312 -0
  104. package/dist/server/oauth/providers/base.js.map +1 -0
  105. package/dist/server/oauth/providers/github.d.ts +55 -0
  106. package/dist/server/oauth/providers/github.d.ts.map +1 -0
  107. package/dist/server/oauth/providers/github.js +225 -0
  108. package/dist/server/oauth/providers/github.js.map +1 -0
  109. package/dist/server/oauth/providers/google.d.ts +49 -0
  110. package/dist/server/oauth/providers/google.d.ts.map +1 -0
  111. package/dist/server/oauth/providers/google.js +153 -0
  112. package/dist/server/oauth/providers/google.js.map +1 -0
  113. package/dist/server/oauth/providers/index.d.ts +9 -0
  114. package/dist/server/oauth/providers/index.d.ts.map +1 -0
  115. package/dist/server/oauth/providers/index.js +24 -0
  116. package/dist/server/oauth/providers/index.js.map +1 -0
  117. package/dist/server/oauth/refreshTokenRotation.d.ts +114 -0
  118. package/dist/server/oauth/refreshTokenRotation.d.ts.map +1 -0
  119. package/dist/server/oauth/refreshTokenRotation.js +344 -0
  120. package/dist/server/oauth/refreshTokenRotation.js.map +1 -0
  121. package/dist/server/oauth/security.d.ts +101 -0
  122. package/dist/server/oauth/security.d.ts.map +1 -0
  123. package/dist/server/oauth/security.js +268 -0
  124. package/dist/server/oauth/security.js.map +1 -0
  125. package/dist/server/oauth/tokenEncryption.d.ts +80 -0
  126. package/dist/server/oauth/tokenEncryption.d.ts.map +1 -0
  127. package/dist/server/oauth/tokenEncryption.js +218 -0
  128. package/dist/server/oauth/tokenEncryption.js.map +1 -0
  129. package/dist/tools/checkpoint.d.ts +35 -0
  130. package/dist/tools/checkpoint.d.ts.map +1 -0
  131. package/dist/tools/checkpoint.js +125 -0
  132. package/dist/tools/checkpoint.js.map +1 -0
  133. package/dist/tools/index.d.ts +412 -0
  134. package/dist/tools/index.d.ts.map +1 -0
  135. package/dist/tools/index.js +262 -0
  136. package/dist/tools/index.js.map +1 -0
  137. package/dist/tools/insight.d.ts +65 -0
  138. package/dist/tools/insight.d.ts.map +1 -0
  139. package/dist/tools/insight.js +190 -0
  140. package/dist/tools/insight.js.map +1 -0
  141. package/dist/tools/journey.d.ts +45 -0
  142. package/dist/tools/journey.d.ts.map +1 -0
  143. package/dist/tools/journey.js +115 -0
  144. package/dist/tools/journey.js.map +1 -0
  145. package/dist/tools/sendMessage.d.ts +6 -0
  146. package/dist/tools/sendMessage.d.ts.map +1 -0
  147. package/dist/tools/sendMessage.js +278 -0
  148. package/dist/tools/sendMessage.js.map +1 -0
  149. package/dist/tools/session.d.ts +106 -0
  150. package/dist/tools/session.d.ts.map +1 -0
  151. package/dist/tools/session.js +161 -0
  152. package/dist/tools/session.js.map +1 -0
  153. package/dist/types/auth.d.ts +37 -0
  154. package/dist/types/auth.d.ts.map +1 -0
  155. package/dist/types/auth.js +44 -0
  156. package/dist/types/auth.js.map +1 -0
  157. package/dist/types/checkpoint.d.ts +25 -0
  158. package/dist/types/checkpoint.d.ts.map +1 -0
  159. package/dist/types/checkpoint.js +8 -0
  160. package/dist/types/checkpoint.js.map +1 -0
  161. package/dist/types/insight.d.ts +83 -0
  162. package/dist/types/insight.d.ts.map +1 -0
  163. package/dist/types/insight.js +14 -0
  164. package/dist/types/insight.js.map +1 -0
  165. package/dist/types/journey.d.ts +155 -0
  166. package/dist/types/journey.d.ts.map +1 -0
  167. package/dist/types/journey.js +29 -0
  168. package/dist/types/journey.js.map +1 -0
  169. package/dist/types/session.d.ts +82 -0
  170. package/dist/types/session.d.ts.map +1 -0
  171. package/dist/types/session.js +13 -0
  172. package/dist/types/session.js.map +1 -0
  173. package/dist/utils/circuitBreaker.d.ts +86 -0
  174. package/dist/utils/circuitBreaker.d.ts.map +1 -0
  175. package/dist/utils/circuitBreaker.js +234 -0
  176. package/dist/utils/circuitBreaker.js.map +1 -0
  177. package/dist/utils/errorHandler.d.ts +101 -0
  178. package/dist/utils/errorHandler.d.ts.map +1 -0
  179. package/dist/utils/errorHandler.js +348 -0
  180. package/dist/utils/errorHandler.js.map +1 -0
  181. package/dist/utils/errors.d.ts +36 -0
  182. package/dist/utils/errors.d.ts.map +1 -0
  183. package/dist/utils/errors.js +77 -0
  184. package/dist/utils/errors.js.map +1 -0
  185. package/dist/utils/logger.d.ts +13 -0
  186. package/dist/utils/logger.d.ts.map +1 -0
  187. package/dist/utils/logger.js +49 -0
  188. package/dist/utils/logger.js.map +1 -0
  189. package/dist/utils/performanceMonitor.d.ts +106 -0
  190. package/dist/utils/performanceMonitor.d.ts.map +1 -0
  191. package/dist/utils/performanceMonitor.js +312 -0
  192. package/dist/utils/performanceMonitor.js.map +1 -0
  193. package/dist/utils/responseCache.d.ts +88 -0
  194. package/dist/utils/responseCache.d.ts.map +1 -0
  195. package/dist/utils/responseCache.js +245 -0
  196. package/dist/utils/responseCache.js.map +1 -0
  197. package/dist/utils/retryStrategy.d.ts +49 -0
  198. package/dist/utils/retryStrategy.d.ts.map +1 -0
  199. package/dist/utils/retryStrategy.js +167 -0
  200. package/dist/utils/retryStrategy.js.map +1 -0
  201. package/dist/workflows/definitions/daily-reflection.d.ts +3 -0
  202. package/dist/workflows/definitions/daily-reflection.d.ts.map +1 -0
  203. package/dist/workflows/definitions/daily-reflection.js +52 -0
  204. package/dist/workflows/definitions/daily-reflection.js.map +1 -0
  205. package/dist/workflows/definitions/gratitude-practice.d.ts +3 -0
  206. package/dist/workflows/definitions/gratitude-practice.d.ts.map +1 -0
  207. package/dist/workflows/definitions/gratitude-practice.js +52 -0
  208. package/dist/workflows/definitions/gratitude-practice.js.map +1 -0
  209. package/dist/workflows/definitions/weekly-review.d.ts +3 -0
  210. package/dist/workflows/definitions/weekly-review.d.ts.map +1 -0
  211. package/dist/workflows/definitions/weekly-review.js +74 -0
  212. package/dist/workflows/definitions/weekly-review.js.map +1 -0
  213. package/dist/workflows/engine.d.ts +21 -0
  214. package/dist/workflows/engine.d.ts.map +1 -0
  215. package/dist/workflows/engine.js +149 -0
  216. package/dist/workflows/engine.js.map +1 -0
  217. package/dist/workflows/index.d.ts +26 -0
  218. package/dist/workflows/index.d.ts.map +1 -0
  219. package/dist/workflows/index.js +14 -0
  220. package/dist/workflows/index.js.map +1 -0
  221. package/package.json +98 -0
  222. package/run-mcp-server.sh +16 -0
@@ -0,0 +1,486 @@
1
+ import * as tar from 'tar';
2
+ import { logger } from '../../../utils/logger.js';
3
+ import { getDb } from '../../../db/client.js';
4
+ import { createHash, randomBytes } from 'crypto';
5
+ import path from 'path';
6
+ /**
7
+ * Data export format options
8
+ */
9
+ export var ExportFormat;
10
+ (function (ExportFormat) {
11
+ ExportFormat["JSON"] = "json";
12
+ ExportFormat["CSV"] = "csv";
13
+ ExportFormat["XML"] = "xml";
14
+ ExportFormat["PDF"] = "pdf";
15
+ ExportFormat["ARCHIVE"] = "archive";
16
+ })(ExportFormat || (ExportFormat = {}));
17
+ /**
18
+ * Data categories for export
19
+ */
20
+ export var DataCategory;
21
+ (function (DataCategory) {
22
+ DataCategory["PROFILE"] = "profile";
23
+ DataCategory["AUTHENTICATION"] = "authentication";
24
+ DataCategory["SESSIONS"] = "sessions";
25
+ DataCategory["INSIGHTS"] = "insights";
26
+ DataCategory["CONSENTS"] = "consents";
27
+ DataCategory["ACTIVITY_LOGS"] = "activity_logs";
28
+ DataCategory["COMMUNICATIONS"] = "communications";
29
+ DataCategory["PREFERENCES"] = "preferences";
30
+ DataCategory["THIRD_PARTY_DATA"] = "third_party";
31
+ DataCategory["DERIVED_DATA"] = "derived";
32
+ DataCategory["ALL"] = "all";
33
+ })(DataCategory || (DataCategory = {}));
34
+ /**
35
+ * Export request status
36
+ */
37
+ export var ExportStatus;
38
+ (function (ExportStatus) {
39
+ ExportStatus["PENDING"] = "pending";
40
+ ExportStatus["PROCESSING"] = "processing";
41
+ ExportStatus["COMPLETED"] = "completed";
42
+ ExportStatus["FAILED"] = "failed";
43
+ ExportStatus["EXPIRED"] = "expired";
44
+ ExportStatus["CANCELLED"] = "cancelled";
45
+ })(ExportStatus || (ExportStatus = {}));
46
+ /**
47
+ * GDPR Data Portability Manager
48
+ * Implements GDPR Article 20 - Right to data portability
49
+ */
50
+ export class DataPortabilityManager {
51
+ EXPORT_VERSION = '1.0.0';
52
+ EXPORT_EXPIRY_HOURS = 72; // 3 days
53
+ MAX_EXPORT_SIZE_MB = 1000; // 1GB limit
54
+ CHUNK_SIZE = 1024 * 1024; // 1MB chunks
55
+ exportQueue = new Map();
56
+ /**
57
+ * Request data export
58
+ */
59
+ async requestExport(userId, categories = [DataCategory.ALL], format = ExportFormat.JSON, options) {
60
+ // Check for existing pending export
61
+ const existingExport = await this.getActiveExport(userId);
62
+ if (existingExport) {
63
+ logger.warn(`Export already in progress for user ${userId}`);
64
+ return existingExport;
65
+ }
66
+ const exportId = this.generateExportId(userId);
67
+ const now = new Date();
68
+ const request = {
69
+ id: exportId,
70
+ userId,
71
+ requestedAt: now,
72
+ requestedBy: options?.requestedBy || userId,
73
+ categories: categories.includes(DataCategory.ALL)
74
+ ? Object.values(DataCategory).filter(c => c !== DataCategory.ALL)
75
+ : categories,
76
+ format,
77
+ status: ExportStatus.PENDING,
78
+ expiresAt: new Date(now.getTime() + this.EXPORT_EXPIRY_HOURS * 3600000),
79
+ metadata: {
80
+ ipAddress: options?.ipAddress || '',
81
+ userAgent: options?.userAgent || '',
82
+ reason: options?.reason,
83
+ includeDeleted: options?.includeDeleted || false,
84
+ dateRange: options?.dateRange,
85
+ },
86
+ };
87
+ // Generate encryption key if requested
88
+ if (options?.encrypted) {
89
+ request.encryptionKey = randomBytes(32).toString('base64');
90
+ }
91
+ // Store request
92
+ await this.storeExportRequest(request);
93
+ this.exportQueue.set(exportId, request);
94
+ // Process asynchronously
95
+ this.processExportAsync(request);
96
+ logger.info(`Data export requested for user ${userId}: ${exportId}`);
97
+ return request;
98
+ }
99
+ /**
100
+ * Process export asynchronously
101
+ */
102
+ async processExportAsync(request) {
103
+ try {
104
+ // Update status
105
+ request.status = ExportStatus.PROCESSING;
106
+ await this.updateExportRequest(request);
107
+ // Collect user data
108
+ const userData = await this.collectUserData(request.userId, request.categories, request.metadata?.dateRange);
109
+ // Validate data size
110
+ const estimatedSize = this.estimateDataSize(userData);
111
+ if (estimatedSize > this.MAX_EXPORT_SIZE_MB * 1024 * 1024) {
112
+ throw new Error(`Export size exceeds limit: ${estimatedSize} bytes`);
113
+ }
114
+ // Generate export file
115
+ const filePath = await this.generateExportFile(userData, request.format, request.encryptionKey);
116
+ // Calculate checksum
117
+ const checksum = await this.calculateChecksum(filePath);
118
+ // Upload to secure storage
119
+ const downloadUrl = await this.uploadToStorage(filePath, request.id);
120
+ // Update request
121
+ request.status = ExportStatus.COMPLETED;
122
+ request.completedAt = new Date();
123
+ request.downloadUrl = downloadUrl;
124
+ request.checksum = checksum;
125
+ request.fileSize = estimatedSize;
126
+ await this.updateExportRequest(request);
127
+ // Send notification
128
+ await this.notifyExportComplete(request);
129
+ logger.info(`Export completed for user ${request.userId}: ${request.id}`);
130
+ }
131
+ catch (error) {
132
+ logger.error(`Export failed for user ${request.userId}:`, error);
133
+ request.status = ExportStatus.FAILED;
134
+ await this.updateExportRequest(request);
135
+ await this.notifyExportFailed(request, error);
136
+ }
137
+ finally {
138
+ this.exportQueue.delete(request.id);
139
+ }
140
+ }
141
+ /**
142
+ * Collect all user data for export
143
+ */
144
+ async collectUserData(userId, categories, dateRange) {
145
+ const data = {
146
+ exportVersion: this.EXPORT_VERSION,
147
+ exportDate: new Date(),
148
+ userId,
149
+ profile: await this.getUserProfile(userId),
150
+ authentication: await this.getAuthenticationData(userId),
151
+ data: {},
152
+ statistics: {
153
+ totalSessions: 0,
154
+ totalInsights: 0,
155
+ totalCheckpoints: 0,
156
+ dataPointsExported: 0,
157
+ },
158
+ legalNotice: this.generateLegalNotice(),
159
+ };
160
+ // Collect data by category
161
+ for (const category of categories) {
162
+ const categoryData = await this.collectCategoryData(userId, category, dateRange);
163
+ if (categoryData && categoryData.length > 0) {
164
+ data.data[category] = categoryData;
165
+ data.statistics.dataPointsExported += categoryData.length;
166
+ // Update statistics
167
+ switch (category) {
168
+ case DataCategory.SESSIONS:
169
+ data.statistics.totalSessions = categoryData.length;
170
+ break;
171
+ case DataCategory.INSIGHTS:
172
+ data.statistics.totalInsights = categoryData.length;
173
+ break;
174
+ }
175
+ }
176
+ }
177
+ // Add data relationships and cross-references
178
+ data.data.relationships = await this.getDataRelationships(userId);
179
+ return data;
180
+ }
181
+ /**
182
+ * Collect data for specific category
183
+ */
184
+ async collectCategoryData(userId, category, dateRange) {
185
+ const db = getDb();
186
+ switch (category) {
187
+ case DataCategory.PROFILE:
188
+ return [await this.getUserProfile(userId)];
189
+ case DataCategory.SESSIONS:
190
+ // Get sessions with optional date range
191
+ return []; // Would query database
192
+ case DataCategory.INSIGHTS:
193
+ // Get user insights
194
+ return []; // Would query database
195
+ case DataCategory.CONSENTS:
196
+ // Get consent history
197
+ return []; // Would query database
198
+ case DataCategory.ACTIVITY_LOGS:
199
+ // Get activity logs
200
+ return []; // Would query database
201
+ case DataCategory.COMMUNICATIONS:
202
+ // Get communication preferences and history
203
+ return []; // Would query database
204
+ case DataCategory.PREFERENCES:
205
+ // Get user preferences
206
+ return []; // Would query database
207
+ case DataCategory.THIRD_PARTY_DATA:
208
+ // Get data from third-party integrations
209
+ return []; // Would query external services
210
+ case DataCategory.DERIVED_DATA:
211
+ // Get AI-derived insights and predictions
212
+ return []; // Would query database
213
+ default:
214
+ return [];
215
+ }
216
+ }
217
+ /**
218
+ * Generate export file in specified format
219
+ */
220
+ async generateExportFile(data, format, encryptionKey) {
221
+ const tempDir = '/tmp/gdpr-exports';
222
+ const fileName = `export-${data.userId}-${Date.now()}`;
223
+ let filePath;
224
+ switch (format) {
225
+ case ExportFormat.JSON:
226
+ filePath = await this.generateJSONExport(data, tempDir, fileName);
227
+ break;
228
+ case ExportFormat.CSV:
229
+ filePath = await this.generateCSVExport(data, tempDir, fileName);
230
+ break;
231
+ case ExportFormat.XML:
232
+ filePath = await this.generateXMLExport(data, tempDir, fileName);
233
+ break;
234
+ case ExportFormat.PDF:
235
+ filePath = await this.generatePDFExport(data, tempDir, fileName);
236
+ break;
237
+ case ExportFormat.ARCHIVE:
238
+ filePath = await this.generateArchiveExport(data, tempDir, fileName);
239
+ break;
240
+ default:
241
+ throw new Error(`Unsupported format: ${format}`);
242
+ }
243
+ // Encrypt if requested
244
+ if (encryptionKey) {
245
+ filePath = await this.encryptExportFile(filePath, encryptionKey);
246
+ }
247
+ return filePath;
248
+ }
249
+ /**
250
+ * Generate JSON export
251
+ */
252
+ async generateJSONExport(data, tempDir, fileName) {
253
+ const filePath = path.join(tempDir, `${fileName}.json`);
254
+ const content = JSON.stringify(data, null, 2);
255
+ await this.writeFile(filePath, content);
256
+ return filePath;
257
+ }
258
+ /**
259
+ * Generate CSV export (flattened data)
260
+ */
261
+ async generateCSVExport(data, tempDir, fileName) {
262
+ const filePath = path.join(tempDir, `${fileName}.csv`);
263
+ // Convert nested data to CSV format
264
+ // This would use a CSV library in production
265
+ const csvContent = this.convertToCSV(data);
266
+ await this.writeFile(filePath, csvContent);
267
+ return filePath;
268
+ }
269
+ /**
270
+ * Generate XML export
271
+ */
272
+ async generateXMLExport(data, tempDir, fileName) {
273
+ const filePath = path.join(tempDir, `${fileName}.xml`);
274
+ // Convert to XML format
275
+ const xmlContent = this.convertToXML(data);
276
+ await this.writeFile(filePath, xmlContent);
277
+ return filePath;
278
+ }
279
+ /**
280
+ * Generate PDF export (human-readable)
281
+ */
282
+ async generatePDFExport(data, tempDir, fileName) {
283
+ const filePath = path.join(tempDir, `${fileName}.pdf`);
284
+ // Generate PDF (would use PDF library like pdfkit)
285
+ // For now, just create a placeholder
286
+ await this.writeFile(filePath, JSON.stringify(data));
287
+ return filePath;
288
+ }
289
+ /**
290
+ * Generate archive with all formats
291
+ */
292
+ async generateArchiveExport(data, tempDir, fileName) {
293
+ const archiveDir = path.join(tempDir, fileName);
294
+ // Generate all formats
295
+ await this.generateJSONExport(data, archiveDir, 'data');
296
+ await this.generateCSVExport(data, archiveDir, 'data');
297
+ await this.generateXMLExport(data, archiveDir, 'data');
298
+ await this.generatePDFExport(data, archiveDir, 'report');
299
+ // Create TAR.GZ archive
300
+ const archivePath = path.join(tempDir, `${fileName}.tar.gz`);
301
+ await tar.create({
302
+ gzip: true,
303
+ file: archivePath,
304
+ cwd: tempDir,
305
+ }, [fileName]);
306
+ return archivePath;
307
+ }
308
+ /**
309
+ * Import user data (for transfer between services)
310
+ */
311
+ async importUserData(importData, options) {
312
+ const result = {
313
+ success: false,
314
+ imported: 0,
315
+ skipped: 0,
316
+ errors: [],
317
+ };
318
+ try {
319
+ // Validate schema
320
+ if (options?.validateSchema) {
321
+ const valid = await this.validateImportSchema(importData);
322
+ if (!valid) {
323
+ result.errors.push('Invalid data schema');
324
+ return result;
325
+ }
326
+ }
327
+ // Check if user exists
328
+ const userExists = await this.checkUserExists(importData.userId);
329
+ if (userExists && !options?.merge) {
330
+ result.errors.push('User already exists');
331
+ return result;
332
+ }
333
+ // Import data by category
334
+ for (const [category, items] of Object.entries(importData.data)) {
335
+ try {
336
+ const imported = await this.importCategoryData(importData.userId, category, items, options);
337
+ result.imported += imported.count;
338
+ result.skipped += imported.skipped;
339
+ }
340
+ catch (error) {
341
+ result.errors.push(`Failed to import ${category}: ${error}`);
342
+ }
343
+ }
344
+ result.success = result.errors.length === 0;
345
+ logger.info(`Data import completed: ${result.imported} imported, ${result.skipped} skipped`);
346
+ }
347
+ catch (error) {
348
+ logger.error('Data import failed:', error);
349
+ result.errors.push(`Import failed: ${error}`);
350
+ }
351
+ return result;
352
+ }
353
+ /**
354
+ * Get export status
355
+ */
356
+ async getExportStatus(exportId) {
357
+ return this.exportQueue.get(exportId) || null;
358
+ }
359
+ /**
360
+ * Cancel export request
361
+ */
362
+ async cancelExport(exportId, userId) {
363
+ const request = this.exportQueue.get(exportId);
364
+ if (!request) {
365
+ return false;
366
+ }
367
+ if (request.userId !== userId) {
368
+ throw new Error('Unauthorized to cancel this export');
369
+ }
370
+ if (request.status !== ExportStatus.PENDING) {
371
+ throw new Error('Cannot cancel export in progress');
372
+ }
373
+ request.status = ExportStatus.CANCELLED;
374
+ await this.updateExportRequest(request);
375
+ this.exportQueue.delete(exportId);
376
+ logger.info(`Export cancelled: ${exportId}`);
377
+ return true;
378
+ }
379
+ /**
380
+ * Clean up expired exports
381
+ */
382
+ async cleanupExpiredExports() {
383
+ const now = new Date();
384
+ let cleaned = 0;
385
+ for (const [id, request] of this.exportQueue) {
386
+ if (request.expiresAt < now) {
387
+ // Delete file from storage
388
+ if (request.downloadUrl) {
389
+ await this.deleteFromStorage(request.downloadUrl);
390
+ }
391
+ // Update status
392
+ request.status = ExportStatus.EXPIRED;
393
+ await this.updateExportRequest(request);
394
+ // Remove from queue
395
+ this.exportQueue.delete(id);
396
+ cleaned++;
397
+ }
398
+ }
399
+ logger.info(`Cleaned up ${cleaned} expired exports`);
400
+ return cleaned;
401
+ }
402
+ // Helper methods
403
+ generateExportId(userId) {
404
+ return `export_${userId}_${Date.now()}_${randomBytes(8).toString('hex')}`;
405
+ }
406
+ estimateDataSize(data) {
407
+ return JSON.stringify(data).length;
408
+ }
409
+ async calculateChecksum(filePath) {
410
+ return createHash('sha256')
411
+ .update(await this.readFile(filePath))
412
+ .digest('hex');
413
+ }
414
+ convertToCSV(data) {
415
+ // Simplified CSV conversion
416
+ return JSON.stringify(data); // Would use proper CSV library
417
+ }
418
+ convertToXML(data) {
419
+ // Simplified XML conversion
420
+ return `<?xml version="1.0"?><data>${JSON.stringify(data)}</data>`;
421
+ }
422
+ generateLegalNotice() {
423
+ return `This data export contains personal information protected under GDPR.
424
+ It is provided for data portability purposes as per Article 20 of GDPR.
425
+ This data should be handled securely and in compliance with applicable privacy laws.`;
426
+ }
427
+ // Mock database operations
428
+ async getUserProfile(userId) {
429
+ return { id: userId, email: 'user@example.com' };
430
+ }
431
+ async getAuthenticationData(userId) {
432
+ return { providers: ['google'], mfaEnabled: true, sessions: [] };
433
+ }
434
+ async getDataRelationships(userId) {
435
+ return {};
436
+ }
437
+ async storeExportRequest(request) {
438
+ // Store in database
439
+ }
440
+ async updateExportRequest(request) {
441
+ // Update in database
442
+ }
443
+ async getActiveExport(userId) {
444
+ // Check database for active exports
445
+ return null;
446
+ }
447
+ async uploadToStorage(filePath, exportId) {
448
+ // Upload to secure cloud storage
449
+ return `https://storage.example.com/exports/${exportId}`;
450
+ }
451
+ async deleteFromStorage(url) {
452
+ // Delete from cloud storage
453
+ }
454
+ async notifyExportComplete(request) {
455
+ // Send notification
456
+ }
457
+ async notifyExportFailed(request, error) {
458
+ // Send failure notification
459
+ }
460
+ async encryptExportFile(filePath, key) {
461
+ // Encrypt file
462
+ return `${filePath}.encrypted`;
463
+ }
464
+ async validateImportSchema(data) {
465
+ // Validate data structure
466
+ return true;
467
+ }
468
+ async checkUserExists(userId) {
469
+ // Check if user exists
470
+ return false;
471
+ }
472
+ async importCategoryData(userId, category, items, options) {
473
+ // Import data
474
+ return { count: items.length, skipped: 0 };
475
+ }
476
+ async writeFile(path, content) {
477
+ // Write file
478
+ }
479
+ async readFile(path) {
480
+ // Read file
481
+ return '';
482
+ }
483
+ }
484
+ // Export singleton instance
485
+ export const dataPortabilityManager = new DataPortabilityManager();
486
+ //# sourceMappingURL=dataPortability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataPortability.js","sourceRoot":"","sources":["../../../../src/server/oauth/gdpr/dataPortability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import { ProcessingPurpose } from './consent.js';
2
+ import { ExportFormat, DataCategory } from './dataPortability.js';
3
+ /**
4
+ * GDPR Compliance Manager
5
+ * Central interface for all GDPR-related operations
6
+ */
7
+ export declare class GDPRComplianceManager {
8
+ /**
9
+ * Initialize GDPR compliance
10
+ */
11
+ initialize(): Promise<void>;
12
+ /**
13
+ * Handle user registration with GDPR compliance
14
+ */
15
+ registerUser(userId: string, email: string, options: {
16
+ birthDate?: Date;
17
+ country?: string;
18
+ acceptedTerms: boolean;
19
+ marketingConsent?: boolean;
20
+ ipAddress?: string;
21
+ userAgent?: string;
22
+ }): Promise<void>;
23
+ /**
24
+ * Handle data access request
25
+ */
26
+ handleDataAccessRequest(userId: string, requestedBy: string, categories?: DataCategory[]): Promise<string>;
27
+ /**
28
+ * Handle data portability request
29
+ */
30
+ handlePortabilityRequest(userId: string, format?: ExportFormat, encrypted?: boolean): Promise<string>;
31
+ /**
32
+ * Handle deletion request
33
+ */
34
+ handleDeletionRequest(userId: string, reason?: string, immediate?: boolean): Promise<string>;
35
+ /**
36
+ * Update consent preferences
37
+ */
38
+ updateConsent(userId: string, purpose: ProcessingPurpose, granted: boolean, context?: {
39
+ ipAddress?: string;
40
+ userAgent?: string;
41
+ }): Promise<void>;
42
+ /**
43
+ * Check data processing lawfulness
44
+ */
45
+ isProcessingLawful(userId: string, purpose: ProcessingPurpose): Promise<boolean>;
46
+ /**
47
+ * Handle data breach notification
48
+ */
49
+ handleDataBreach(affectedUsers: string[], breachDetails: {
50
+ discoveredAt: Date;
51
+ description: string;
52
+ dataTypes: string[];
53
+ severity: 'low' | 'medium' | 'high' | 'critical';
54
+ mitigationSteps: string[];
55
+ }): Promise<void>;
56
+ /**
57
+ * Generate privacy report
58
+ */
59
+ generatePrivacyReport(startDate: Date, endDate: Date): Promise<{
60
+ totalUsers: number;
61
+ consentStats: Record<string, number>;
62
+ dataRequests: {
63
+ access: number;
64
+ portability: number;
65
+ deletion: number;
66
+ };
67
+ breaches: number;
68
+ crossBorderTransfers: number;
69
+ }>;
70
+ /**
71
+ * Verify age and get parental consent if needed
72
+ */
73
+ verifyAgeAndConsent(userId: string, birthDate: Date, country: string, parentEmail?: string): Promise<{
74
+ ageVerified: boolean;
75
+ requiresParental: boolean;
76
+ parentalConsentToken?: string;
77
+ }>;
78
+ /**
79
+ * Handle cross-border data transfer
80
+ */
81
+ authorizeCrossBorderTransfer(userId: string, destinationCountry: string, purpose: string, safeguards: 'scc' | 'bcr' | 'adequacy' | 'consent'): Promise<boolean>;
82
+ /**
83
+ * Setup periodic GDPR tasks
84
+ */
85
+ private setupPeriodicTasks;
86
+ private verifyDataAccessAuthorization;
87
+ private notifySupervisoryAuthority;
88
+ private notifyUserOfBreach;
89
+ private documentDataBreach;
90
+ private loadPrivacyPolicies;
91
+ private generateParentalConsentToken;
92
+ private checkAdequacyDecision;
93
+ private getExplicitTransferConsent;
94
+ private logCrossBorderTransfer;
95
+ private processScheduledDeletions;
96
+ private reviewConsentValidity;
97
+ }
98
+ export declare const gdprManager: GDPRComplianceManager;
99
+ export { consentManager, ConsentType, ProcessingPurpose, dataPortabilityManager, ExportFormat, DataCategory, rightToErasureManager, DeletionScope, } from './consent.js';
100
+ export type { ConsentRecord, ConsentPreferences, } from './consent.js';
101
+ export type { ExportRequest, UserDataExport, } from './dataPortability.js';
102
+ export type { DeletionRequest, DeletionReport, RetentionReason, } from './rightToErasure.js';
103
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/oauth/gdpr/index.ts"],"names":[],"mappings":"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"}