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,388 @@
1
+ import { logger } from '../../../utils/logger.js';
2
+ import { createHash } from 'crypto';
3
+ /**
4
+ * Consent types as per GDPR Article 6
5
+ */
6
+ export var ConsentType;
7
+ (function (ConsentType) {
8
+ // Lawful basis for processing
9
+ ConsentType["NECESSARY"] = "necessary";
10
+ ConsentType["LEGITIMATE_INTEREST"] = "legitimate";
11
+ ConsentType["CONSENT"] = "consent";
12
+ ConsentType["LEGAL_OBLIGATION"] = "legal";
13
+ ConsentType["VITAL_INTERESTS"] = "vital";
14
+ ConsentType["PUBLIC_TASK"] = "public";
15
+ })(ConsentType || (ConsentType = {}));
16
+ /**
17
+ * Processing purposes requiring consent
18
+ */
19
+ export var ProcessingPurpose;
20
+ (function (ProcessingPurpose) {
21
+ ProcessingPurpose["AUTHENTICATION"] = "authentication";
22
+ ProcessingPurpose["PROFILE_DATA"] = "profile_data";
23
+ ProcessingPurpose["ANALYTICS"] = "analytics";
24
+ ProcessingPurpose["MARKETING"] = "marketing";
25
+ ProcessingPurpose["THIRD_PARTY_SHARING"] = "third_party";
26
+ ProcessingPurpose["DATA_RETENTION"] = "data_retention";
27
+ ProcessingPurpose["COOKIES"] = "cookies";
28
+ ProcessingPurpose["LOCATION"] = "location";
29
+ ProcessingPurpose["BIOMETRIC"] = "biometric";
30
+ ProcessingPurpose["HEALTH_DATA"] = "health_data";
31
+ })(ProcessingPurpose || (ProcessingPurpose = {}));
32
+ /**
33
+ * GDPR Consent Manager
34
+ * Manages user consent per GDPR Articles 6, 7, and 8
35
+ */
36
+ export class ConsentManager {
37
+ CONSENT_VERSION = '2.0.0';
38
+ PRIVACY_POLICY_VERSION = '1.5.0';
39
+ MINIMUM_AGE_EU = 16;
40
+ MINIMUM_AGE_US = 13;
41
+ CONSENT_EXPIRY_DAYS = 365; // Re-consent annually
42
+ // In-memory cache for frequently accessed consents
43
+ consentCache = new Map();
44
+ CACHE_TTL = 300000; // 5 minutes
45
+ /**
46
+ * Record user consent
47
+ */
48
+ async recordConsent(userId, purpose, granted, options) {
49
+ const consentId = this.generateConsentId(userId, purpose);
50
+ const now = new Date();
51
+ const record = {
52
+ id: consentId,
53
+ userId,
54
+ purpose,
55
+ lawfulBasis: this.determineLawfulBasis(purpose),
56
+ granted,
57
+ grantedAt: granted ? now : undefined,
58
+ revokedAt: !granted ? now : undefined,
59
+ expiresAt: granted && options?.expiryDays
60
+ ? new Date(now.getTime() + options.expiryDays * 86400000)
61
+ : new Date(now.getTime() + this.CONSENT_EXPIRY_DAYS * 86400000),
62
+ version: this.CONSENT_VERSION,
63
+ ipAddress: options?.ipAddress,
64
+ userAgent: options?.userAgent,
65
+ parentalConsent: options?.parentalConsent,
66
+ metadata: options?.metadata || {
67
+ consentText: this.getConsentText(purpose),
68
+ privacyPolicyVersion: this.PRIVACY_POLICY_VERSION,
69
+ termsVersion: '1.0.0',
70
+ language: 'en',
71
+ channel: 'web',
72
+ },
73
+ };
74
+ // Store in database
75
+ await this.storeConsentRecord(record);
76
+ // Invalidate cache
77
+ this.consentCache.delete(userId);
78
+ // Log consent event for audit
79
+ logger.info(`Consent ${granted ? 'granted' : 'revoked'} for user ${userId}, purpose: ${purpose}`);
80
+ // Send confirmation if required
81
+ if (this.requiresConfirmation(purpose)) {
82
+ await this.sendConsentConfirmation(userId, record);
83
+ }
84
+ return record;
85
+ }
86
+ /**
87
+ * Bulk consent update
88
+ */
89
+ async updateBulkConsent(userId, consents, context) {
90
+ const records = [];
91
+ for (const [purpose, granted] of consents) {
92
+ const record = await this.recordConsent(userId, purpose, granted, context);
93
+ records.push(record);
94
+ }
95
+ return this.getUserConsents(userId);
96
+ }
97
+ /**
98
+ * Check if user has valid consent for purpose
99
+ */
100
+ async hasValidConsent(userId, purpose) {
101
+ // Check cache first
102
+ const cached = this.consentCache.get(userId);
103
+ if (cached && Date.now() - cached.lastUpdated.getTime() < this.CACHE_TTL) {
104
+ const consent = cached.consents.get(purpose);
105
+ if (consent) {
106
+ return this.isConsentValid(consent);
107
+ }
108
+ }
109
+ // Some purposes don't require explicit consent
110
+ const lawfulBasis = this.determineLawfulBasis(purpose);
111
+ if (lawfulBasis === ConsentType.NECESSARY ||
112
+ lawfulBasis === ConsentType.LEGITIMATE_INTEREST) {
113
+ return true; // These don't require explicit consent
114
+ }
115
+ // Load from database
116
+ const consents = await this.getUserConsents(userId);
117
+ const consent = consents.consents.get(purpose);
118
+ if (!consent) {
119
+ return false;
120
+ }
121
+ return this.isConsentValid(consent);
122
+ }
123
+ /**
124
+ * Get all user consents
125
+ */
126
+ async getUserConsents(userId) {
127
+ // Check cache
128
+ const cached = this.consentCache.get(userId);
129
+ if (cached && Date.now() - cached.lastUpdated.getTime() < this.CACHE_TTL) {
130
+ return cached;
131
+ }
132
+ // Load from database
133
+ const records = await this.loadUserConsents(userId);
134
+ const preferences = {
135
+ userId,
136
+ consents: new Map(records.map(r => [r.purpose, r])),
137
+ globalOptOut: false, // Would check database
138
+ communicationPreferences: {
139
+ email: true,
140
+ sms: false,
141
+ push: true,
142
+ phone: false,
143
+ },
144
+ lastUpdated: new Date(),
145
+ };
146
+ // Cache the result
147
+ this.consentCache.set(userId, preferences);
148
+ return preferences;
149
+ }
150
+ /**
151
+ * Withdraw consent
152
+ */
153
+ async withdrawConsent(userId, purpose, reason) {
154
+ await this.recordConsent(userId, purpose, false, {
155
+ metadata: {
156
+ consentText: `Consent withdrawn: ${reason || 'User request'}`,
157
+ privacyPolicyVersion: this.PRIVACY_POLICY_VERSION,
158
+ termsVersion: '1.0.0',
159
+ language: 'en',
160
+ channel: 'web',
161
+ },
162
+ });
163
+ // Trigger data deletion if required
164
+ if (this.requiresDataDeletion(purpose)) {
165
+ await this.triggerDataDeletion(userId, purpose);
166
+ }
167
+ logger.info(`Consent withdrawn for user ${userId}, purpose: ${purpose}`);
168
+ }
169
+ /**
170
+ * Withdraw all consents (global opt-out)
171
+ */
172
+ async withdrawAllConsents(userId) {
173
+ const purposes = Object.values(ProcessingPurpose);
174
+ for (const purpose of purposes) {
175
+ // Skip necessary processing
176
+ if (this.determineLawfulBasis(purpose) !== ConsentType.NECESSARY) {
177
+ await this.withdrawConsent(userId, purpose, 'Global opt-out');
178
+ }
179
+ }
180
+ logger.info(`All consents withdrawn for user ${userId}`);
181
+ }
182
+ /**
183
+ * Check parental consent requirement
184
+ */
185
+ async requiresParentalConsent(birthDate, country) {
186
+ const age = this.calculateAge(birthDate);
187
+ // EU countries require parental consent under 16
188
+ if (this.isEUCountry(country)) {
189
+ return age < this.MINIMUM_AGE_EU;
190
+ }
191
+ // US requires parental consent under 13 (COPPA)
192
+ if (country === 'US') {
193
+ return age < this.MINIMUM_AGE_US;
194
+ }
195
+ // Default to EU standard
196
+ return age < this.MINIMUM_AGE_EU;
197
+ }
198
+ /**
199
+ * Verify parental consent
200
+ */
201
+ async verifyParentalConsent(childUserId, parentEmail, verificationCode) {
202
+ // In production, this would verify the parent's identity
203
+ // and their authorization to consent for the child
204
+ const verified = await this.checkParentalVerification(parentEmail, verificationCode);
205
+ if (verified) {
206
+ // Update all child's consents with parental approval
207
+ const consents = await this.getUserConsents(childUserId);
208
+ for (const [purpose, record] of consents.consents) {
209
+ record.parentalConsent = true;
210
+ await this.storeConsentRecord(record);
211
+ }
212
+ logger.info(`Parental consent verified for child user ${childUserId}`);
213
+ return true;
214
+ }
215
+ return false;
216
+ }
217
+ /**
218
+ * Generate consent request for special category data
219
+ */
220
+ async requestSpecialCategoryConsent(userId, dataTypes, justification) {
221
+ // Special category data requires explicit consent
222
+ // This includes: racial/ethnic origin, political opinions,
223
+ // religious beliefs, trade union membership, genetic data,
224
+ // biometric data, health data, sex life, sexual orientation
225
+ const requestId = crypto.randomUUID();
226
+ await this.storeSpecialConsentRequest({
227
+ requestId,
228
+ userId,
229
+ dataTypes,
230
+ justification,
231
+ status: 'pending',
232
+ createdAt: new Date(),
233
+ });
234
+ logger.info(`Special category consent requested for user ${userId}: ${dataTypes.join(', ')}`);
235
+ return requestId;
236
+ }
237
+ /**
238
+ * Export consent history for data portability
239
+ */
240
+ async exportConsentHistory(userId) {
241
+ const consents = await this.loadAllUserConsentHistory(userId);
242
+ const preferences = await this.getUserConsents(userId);
243
+ return {
244
+ consents,
245
+ preferences,
246
+ exportDate: new Date(),
247
+ };
248
+ }
249
+ /**
250
+ * Check consent validity
251
+ */
252
+ isConsentValid(consent) {
253
+ if (!consent.granted) {
254
+ return false;
255
+ }
256
+ if (consent.revokedAt) {
257
+ return false;
258
+ }
259
+ if (consent.expiresAt && new Date() > consent.expiresAt) {
260
+ return false;
261
+ }
262
+ return true;
263
+ }
264
+ /**
265
+ * Determine lawful basis for processing purpose
266
+ */
267
+ determineLawfulBasis(purpose) {
268
+ switch (purpose) {
269
+ case ProcessingPurpose.AUTHENTICATION:
270
+ case ProcessingPurpose.PROFILE_DATA:
271
+ return ConsentType.NECESSARY; // Necessary for service
272
+ case ProcessingPurpose.ANALYTICS:
273
+ return ConsentType.LEGITIMATE_INTEREST;
274
+ case ProcessingPurpose.MARKETING:
275
+ case ProcessingPurpose.THIRD_PARTY_SHARING:
276
+ case ProcessingPurpose.COOKIES:
277
+ case ProcessingPurpose.LOCATION:
278
+ case ProcessingPurpose.BIOMETRIC:
279
+ case ProcessingPurpose.HEALTH_DATA:
280
+ return ConsentType.CONSENT; // Requires explicit consent
281
+ default:
282
+ return ConsentType.CONSENT;
283
+ }
284
+ }
285
+ /**
286
+ * Get consent text for purpose
287
+ */
288
+ getConsentText(purpose) {
289
+ const texts = {
290
+ [ProcessingPurpose.AUTHENTICATION]: 'Process your data for authentication and security',
291
+ [ProcessingPurpose.PROFILE_DATA]: 'Store and process your profile information',
292
+ [ProcessingPurpose.ANALYTICS]: 'Analyze usage patterns to improve our service',
293
+ [ProcessingPurpose.MARKETING]: 'Send you marketing communications and offers',
294
+ [ProcessingPurpose.THIRD_PARTY_SHARING]: 'Share your data with third-party partners',
295
+ [ProcessingPurpose.DATA_RETENTION]: 'Retain your data for the specified period',
296
+ [ProcessingPurpose.COOKIES]: 'Use cookies and similar tracking technologies',
297
+ [ProcessingPurpose.LOCATION]: 'Access and process your location data',
298
+ [ProcessingPurpose.BIOMETRIC]: 'Process your biometric data for identification',
299
+ [ProcessingPurpose.HEALTH_DATA]: 'Process health-related information',
300
+ };
301
+ return texts[purpose] || 'Process your data for the specified purpose';
302
+ }
303
+ /**
304
+ * Check if purpose requires confirmation
305
+ */
306
+ requiresConfirmation(purpose) {
307
+ return [
308
+ ProcessingPurpose.MARKETING,
309
+ ProcessingPurpose.THIRD_PARTY_SHARING,
310
+ ProcessingPurpose.BIOMETRIC,
311
+ ProcessingPurpose.HEALTH_DATA,
312
+ ].includes(purpose);
313
+ }
314
+ /**
315
+ * Check if withdrawal requires data deletion
316
+ */
317
+ requiresDataDeletion(purpose) {
318
+ return [
319
+ ProcessingPurpose.PROFILE_DATA,
320
+ ProcessingPurpose.THIRD_PARTY_SHARING,
321
+ ProcessingPurpose.BIOMETRIC,
322
+ ProcessingPurpose.HEALTH_DATA,
323
+ ].includes(purpose);
324
+ }
325
+ /**
326
+ * Generate consent ID
327
+ */
328
+ generateConsentId(userId, purpose) {
329
+ const hash = createHash('sha256')
330
+ .update(`${userId}:${purpose}:${Date.now()}`)
331
+ .digest('hex');
332
+ return `consent_${hash.substring(0, 16)}`;
333
+ }
334
+ /**
335
+ * Calculate age from birthdate
336
+ */
337
+ calculateAge(birthDate) {
338
+ const today = new Date();
339
+ let age = today.getFullYear() - birthDate.getFullYear();
340
+ const monthDiff = today.getMonth() - birthDate.getMonth();
341
+ if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
342
+ age--;
343
+ }
344
+ return age;
345
+ }
346
+ /**
347
+ * Check if country is in EU
348
+ */
349
+ isEUCountry(country) {
350
+ const euCountries = [
351
+ 'AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR',
352
+ 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL',
353
+ 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE',
354
+ ];
355
+ return euCountries.includes(country);
356
+ }
357
+ // Database operations (would be implemented with actual DB)
358
+ async storeConsentRecord(record) {
359
+ // Store in database
360
+ logger.debug(`Storing consent record: ${record.id}`);
361
+ }
362
+ async loadUserConsents(userId) {
363
+ // Load from database
364
+ return [];
365
+ }
366
+ async loadAllUserConsentHistory(userId) {
367
+ // Load all historical records
368
+ return [];
369
+ }
370
+ async storeSpecialConsentRequest(request) {
371
+ // Store special consent request
372
+ }
373
+ async checkParentalVerification(email, code) {
374
+ // Verify parent identity
375
+ return true; // Mock
376
+ }
377
+ async triggerDataDeletion(userId, purpose) {
378
+ // Trigger data deletion workflow
379
+ logger.info(`Data deletion triggered for user ${userId}, purpose: ${purpose}`);
380
+ }
381
+ async sendConsentConfirmation(userId, record) {
382
+ // Send email confirmation
383
+ logger.info(`Consent confirmation sent to user ${userId}`);
384
+ }
385
+ }
386
+ // Export singleton instance
387
+ export const consentManager = new ConsentManager();
388
+ //# sourceMappingURL=consent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consent.js","sourceRoot":"","sources":["../../../../src/server/oauth/gdpr/consent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Data export format options
3
+ */
4
+ export declare enum ExportFormat {
5
+ JSON = "json",
6
+ CSV = "csv",
7
+ XML = "xml",
8
+ PDF = "pdf",
9
+ ARCHIVE = "archive"
10
+ }
11
+ /**
12
+ * Data categories for export
13
+ */
14
+ export declare enum DataCategory {
15
+ PROFILE = "profile",
16
+ AUTHENTICATION = "authentication",
17
+ SESSIONS = "sessions",
18
+ INSIGHTS = "insights",
19
+ CONSENTS = "consents",
20
+ ACTIVITY_LOGS = "activity_logs",
21
+ COMMUNICATIONS = "communications",
22
+ PREFERENCES = "preferences",
23
+ THIRD_PARTY_DATA = "third_party",
24
+ DERIVED_DATA = "derived",
25
+ ALL = "all"
26
+ }
27
+ /**
28
+ * Export request status
29
+ */
30
+ export declare enum ExportStatus {
31
+ PENDING = "pending",
32
+ PROCESSING = "processing",
33
+ COMPLETED = "completed",
34
+ FAILED = "failed",
35
+ EXPIRED = "expired",
36
+ CANCELLED = "cancelled"
37
+ }
38
+ /**
39
+ * Data export request
40
+ */
41
+ export interface ExportRequest {
42
+ id: string;
43
+ userId: string;
44
+ requestedAt: Date;
45
+ requestedBy: string;
46
+ categories: DataCategory[];
47
+ format: ExportFormat;
48
+ status: ExportStatus;
49
+ completedAt?: Date;
50
+ expiresAt: Date;
51
+ downloadUrl?: string;
52
+ checksum?: string;
53
+ fileSize?: number;
54
+ encryptionKey?: string;
55
+ metadata?: {
56
+ ipAddress: string;
57
+ userAgent: string;
58
+ reason?: string;
59
+ includeDeleted: boolean;
60
+ dateRange?: {
61
+ start: Date;
62
+ end: Date;
63
+ };
64
+ };
65
+ }
66
+ /**
67
+ * User data structure for export
68
+ */
69
+ export interface UserDataExport {
70
+ exportVersion: string;
71
+ exportDate: Date;
72
+ userId: string;
73
+ profile: {
74
+ id: string;
75
+ email: string;
76
+ name?: string;
77
+ createdAt: Date;
78
+ lastActive?: Date;
79
+ metadata?: Record<string, any>;
80
+ };
81
+ authentication: {
82
+ providers: string[];
83
+ lastLogin?: Date;
84
+ mfaEnabled: boolean;
85
+ sessions: Array<{
86
+ id: string;
87
+ createdAt: Date;
88
+ expiresAt: Date;
89
+ ipAddress?: string;
90
+ userAgent?: string;
91
+ }>;
92
+ };
93
+ data: {
94
+ [category: string]: any[];
95
+ };
96
+ statistics: {
97
+ totalSessions: number;
98
+ totalInsights: number;
99
+ totalCheckpoints: number;
100
+ dataPointsExported: number;
101
+ };
102
+ legalNotice: string;
103
+ }
104
+ /**
105
+ * GDPR Data Portability Manager
106
+ * Implements GDPR Article 20 - Right to data portability
107
+ */
108
+ export declare class DataPortabilityManager {
109
+ private readonly EXPORT_VERSION;
110
+ private readonly EXPORT_EXPIRY_HOURS;
111
+ private readonly MAX_EXPORT_SIZE_MB;
112
+ private readonly CHUNK_SIZE;
113
+ private exportQueue;
114
+ /**
115
+ * Request data export
116
+ */
117
+ requestExport(userId: string, categories?: DataCategory[], format?: ExportFormat, options?: {
118
+ requestedBy?: string;
119
+ reason?: string;
120
+ dateRange?: {
121
+ start: Date;
122
+ end: Date;
123
+ };
124
+ includeDeleted?: boolean;
125
+ encrypted?: boolean;
126
+ ipAddress?: string;
127
+ userAgent?: string;
128
+ }): Promise<ExportRequest>;
129
+ /**
130
+ * Process export asynchronously
131
+ */
132
+ private processExportAsync;
133
+ /**
134
+ * Collect all user data for export
135
+ */
136
+ private collectUserData;
137
+ /**
138
+ * Collect data for specific category
139
+ */
140
+ private collectCategoryData;
141
+ /**
142
+ * Generate export file in specified format
143
+ */
144
+ private generateExportFile;
145
+ /**
146
+ * Generate JSON export
147
+ */
148
+ private generateJSONExport;
149
+ /**
150
+ * Generate CSV export (flattened data)
151
+ */
152
+ private generateCSVExport;
153
+ /**
154
+ * Generate XML export
155
+ */
156
+ private generateXMLExport;
157
+ /**
158
+ * Generate PDF export (human-readable)
159
+ */
160
+ private generatePDFExport;
161
+ /**
162
+ * Generate archive with all formats
163
+ */
164
+ private generateArchiveExport;
165
+ /**
166
+ * Import user data (for transfer between services)
167
+ */
168
+ importUserData(importData: UserDataExport, options?: {
169
+ merge?: boolean;
170
+ validateSchema?: boolean;
171
+ skipExisting?: boolean;
172
+ }): Promise<{
173
+ success: boolean;
174
+ imported: number;
175
+ skipped: number;
176
+ errors: string[];
177
+ }>;
178
+ /**
179
+ * Get export status
180
+ */
181
+ getExportStatus(exportId: string): Promise<ExportRequest | null>;
182
+ /**
183
+ * Cancel export request
184
+ */
185
+ cancelExport(exportId: string, userId: string): Promise<boolean>;
186
+ /**
187
+ * Clean up expired exports
188
+ */
189
+ cleanupExpiredExports(): Promise<number>;
190
+ private generateExportId;
191
+ private estimateDataSize;
192
+ private calculateChecksum;
193
+ private convertToCSV;
194
+ private convertToXML;
195
+ private generateLegalNotice;
196
+ private getUserProfile;
197
+ private getAuthenticationData;
198
+ private getDataRelationships;
199
+ private storeExportRequest;
200
+ private updateExportRequest;
201
+ private getActiveExport;
202
+ private uploadToStorage;
203
+ private deleteFromStorage;
204
+ private notifyExportComplete;
205
+ private notifyExportFailed;
206
+ private encryptExportFile;
207
+ private validateImportSchema;
208
+ private checkUserExists;
209
+ private importCategoryData;
210
+ private writeFile;
211
+ private readFile;
212
+ }
213
+ export declare const dataPortabilityManager: DataPortabilityManager;
214
+ //# sourceMappingURL=dataPortability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataPortability.d.ts","sourceRoot":"","sources":["../../../../src/server/oauth/gdpr/dataPortability.ts"],"names":[],"mappings":"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"}