couchloop-eq-mcp 1.0.4 → 1.1.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.
- package/README.md +24 -11
- package/dist/developer/analyzers/bloat-detector.d.ts +89 -0
- package/dist/developer/analyzers/bloat-detector.d.ts.map +1 -0
- package/dist/developer/analyzers/bloat-detector.js +483 -0
- package/dist/developer/analyzers/bloat-detector.js.map +1 -0
- package/dist/developer/backup/auto-backup.d.ts +96 -0
- package/dist/developer/backup/auto-backup.d.ts.map +1 -0
- package/dist/developer/backup/auto-backup.js +346 -0
- package/dist/developer/backup/auto-backup.js.map +1 -0
- package/dist/developer/blockers/package-blocker.d.ts +33 -0
- package/dist/developer/blockers/package-blocker.d.ts.map +1 -0
- package/dist/developer/blockers/package-blocker.js +224 -0
- package/dist/developer/blockers/package-blocker.js.map +1 -0
- package/dist/developer/evaluators/ai-error-preventer.d.ts +54 -0
- package/dist/developer/evaluators/ai-error-preventer.d.ts.map +1 -0
- package/dist/developer/evaluators/ai-error-preventer.js +270 -0
- package/dist/developer/evaluators/ai-error-preventer.js.map +1 -0
- package/dist/developer/evaluators/build-context-detector.d.ts +44 -0
- package/dist/developer/evaluators/build-context-detector.d.ts.map +1 -0
- package/dist/developer/evaluators/build-context-detector.js +258 -0
- package/dist/developer/evaluators/build-context-detector.js.map +1 -0
- package/dist/developer/evaluators/package-evaluator.d.ts +37 -0
- package/dist/developer/evaluators/package-evaluator.d.ts.map +1 -0
- package/dist/developer/evaluators/package-evaluator.js +278 -0
- package/dist/developer/evaluators/package-evaluator.js.map +1 -0
- package/dist/developer/guards/file-guardian.d.ts +79 -0
- package/dist/developer/guards/file-guardian.d.ts.map +1 -0
- package/dist/developer/guards/file-guardian.js +309 -0
- package/dist/developer/guards/file-guardian.js.map +1 -0
- package/dist/developer/managers/context-manager.d.ts +61 -0
- package/dist/developer/managers/context-manager.d.ts.map +1 -0
- package/dist/developer/managers/context-manager.js +302 -0
- package/dist/developer/managers/context-manager.js.map +1 -0
- package/dist/developer/metrics/complexity-calculator.d.ts +52 -0
- package/dist/developer/metrics/complexity-calculator.d.ts.map +1 -0
- package/dist/developer/metrics/complexity-calculator.js +259 -0
- package/dist/developer/metrics/complexity-calculator.js.map +1 -0
- package/dist/developer/reports/review-summary.d.ts +49 -0
- package/dist/developer/reports/review-summary.d.ts.map +1 -0
- package/dist/developer/reports/review-summary.js +249 -0
- package/dist/developer/reports/review-summary.js.map +1 -0
- package/dist/developer/scanners/review-assistant.d.ts +41 -0
- package/dist/developer/scanners/review-assistant.d.ts.map +1 -0
- package/dist/developer/scanners/review-assistant.js +374 -0
- package/dist/developer/scanners/review-assistant.js.map +1 -0
- package/dist/developer/scanners/secret-scanner.d.ts +66 -0
- package/dist/developer/scanners/secret-scanner.d.ts.map +1 -0
- package/dist/developer/scanners/secret-scanner.js +287 -0
- package/dist/developer/scanners/secret-scanner.js.map +1 -0
- package/dist/developer/scanners/sql-injection-detector.d.ts +54 -0
- package/dist/developer/scanners/sql-injection-detector.d.ts.map +1 -0
- package/dist/developer/scanners/sql-injection-detector.js +174 -0
- package/dist/developer/scanners/sql-injection-detector.js.map +1 -0
- package/dist/developer/scanners/xss-detector.d.ts +60 -0
- package/dist/developer/scanners/xss-detector.d.ts.map +1 -0
- package/dist/developer/scanners/xss-detector.js +229 -0
- package/dist/developer/scanners/xss-detector.js.map +1 -0
- package/dist/developer/types/ai-errors.d.ts +34 -0
- package/dist/developer/types/ai-errors.d.ts.map +1 -0
- package/dist/developer/types/ai-errors.js +271 -0
- package/dist/developer/types/ai-errors.js.map +1 -0
- package/dist/developer/types/package.d.ts +32 -0
- package/dist/developer/types/package.d.ts.map +1 -0
- package/dist/developer/types/package.js +5 -0
- package/dist/developer/types/package.js.map +1 -0
- package/dist/developer/updaters/dependency-updater.d.ts +102 -0
- package/dist/developer/updaters/dependency-updater.d.ts.map +1 -0
- package/dist/developer/updaters/dependency-updater.js +472 -0
- package/dist/developer/updaters/dependency-updater.js.map +1 -0
- package/dist/developer/validators/cargo.d.ts +14 -0
- package/dist/developer/validators/cargo.d.ts.map +1 -0
- package/dist/developer/validators/cargo.js +132 -0
- package/dist/developer/validators/cargo.js.map +1 -0
- package/dist/developer/validators/gem.d.ts +14 -0
- package/dist/developer/validators/gem.d.ts.map +1 -0
- package/dist/developer/validators/gem.js +85 -0
- package/dist/developer/validators/gem.js.map +1 -0
- package/dist/developer/validators/go.d.ts +14 -0
- package/dist/developer/validators/go.d.ts.map +1 -0
- package/dist/developer/validators/go.js +138 -0
- package/dist/developer/validators/go.js.map +1 -0
- package/dist/developer/validators/maven.d.ts +14 -0
- package/dist/developer/validators/maven.d.ts.map +1 -0
- package/dist/developer/validators/maven.js +99 -0
- package/dist/developer/validators/maven.js.map +1 -0
- package/dist/developer/validators/npm.d.ts +14 -0
- package/dist/developer/validators/npm.d.ts.map +1 -0
- package/dist/developer/validators/npm.js +96 -0
- package/dist/developer/validators/npm.js.map +1 -0
- package/dist/developer/validators/nuget.d.ts +15 -0
- package/dist/developer/validators/nuget.d.ts.map +1 -0
- package/dist/developer/validators/nuget.js +107 -0
- package/dist/developer/validators/nuget.js.map +1 -0
- package/dist/developer/validators/pypi.d.ts +14 -0
- package/dist/developer/validators/pypi.d.ts.map +1 -0
- package/dist/developer/validators/pypi.js +118 -0
- package/dist/developer/validators/pypi.js.map +1 -0
- package/dist/developer/validators/registry-manager.d.ts +37 -0
- package/dist/developer/validators/registry-manager.d.ts.map +1 -0
- package/dist/developer/validators/registry-manager.js +89 -0
- package/dist/developer/validators/registry-manager.js.map +1 -0
- package/dist/developer/validators/version-checker.d.ts +145 -0
- package/dist/developer/validators/version-checker.d.ts.map +1 -0
- package/dist/developer/validators/version-checker.js +529 -0
- package/dist/developer/validators/version-checker.js.map +1 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/middleware/auth.d.ts +7 -9
- package/dist/server/middleware/auth.d.ts.map +1 -1
- package/dist/server/middleware/auth.js.map +1 -1
- package/dist/tools/check-versions.d.ts +100 -0
- package/dist/tools/check-versions.d.ts.map +1 -0
- package/dist/tools/check-versions.js +328 -0
- package/dist/tools/check-versions.js.map +1 -0
- package/dist/tools/detect-code-smell.d.ts +9 -0
- package/dist/tools/detect-code-smell.d.ts.map +1 -0
- package/dist/tools/detect-code-smell.js +231 -0
- package/dist/tools/detect-code-smell.js.map +1 -0
- package/dist/tools/index.d.ts +471 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +178 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/journey.js +1 -1
- package/dist/tools/journey.js.map +1 -1
- package/dist/tools/pre-review-code.d.ts +71 -0
- package/dist/tools/pre-review-code.d.ts.map +1 -0
- package/dist/tools/pre-review-code.js +159 -0
- package/dist/tools/pre-review-code.js.map +1 -0
- package/dist/tools/preserve-context.d.ts +27 -0
- package/dist/tools/preserve-context.d.ts.map +1 -0
- package/dist/tools/preserve-context.js +98 -0
- package/dist/tools/preserve-context.js.map +1 -0
- package/dist/tools/protect-files.d.ts +224 -0
- package/dist/tools/protect-files.d.ts.map +1 -0
- package/dist/tools/protect-files.js +286 -0
- package/dist/tools/protect-files.js.map +1 -0
- package/dist/tools/scan-security.d.ts +38 -0
- package/dist/tools/scan-security.d.ts.map +1 -0
- package/dist/tools/scan-security.js +237 -0
- package/dist/tools/scan-security.js.map +1 -0
- package/dist/tools/validate_packages.d.ts +8 -0
- package/dist/tools/validate_packages.d.ts.map +1 -0
- package/dist/tools/validate_packages.js +159 -0
- package/dist/tools/validate_packages.js.map +1 -0
- package/dist/types/auth.d.ts.map +1 -1
- package/dist/types/auth.js +1 -2
- package/dist/types/auth.js.map +1 -1
- package/dist/types/context.d.ts +46 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/context.js +17 -0
- package/dist/types/context.js.map +1 -0
- package/dist/types/file-protection.d.ts +50 -0
- package/dist/types/file-protection.d.ts.map +1 -0
- package/dist/types/file-protection.js +9 -0
- package/dist/types/file-protection.js.map +1 -0
- package/dist/utils/errorHandler.d.ts.map +1 -1
- package/dist/utils/errorHandler.js +2 -1
- package/dist/utils/errorHandler.js.map +1 -1
- package/package.json +30 -4
- package/dist/db/migrate.d.ts +0 -4
- package/dist/db/migrate.d.ts.map +0 -1
- package/dist/db/migrate.js +0 -34
- package/dist/db/migrate.js.map +0 -1
- package/dist/db/migrations/schema.d.ts +0 -1074
- package/dist/db/migrations/schema.d.ts.map +0 -1
- package/dist/db/migrations/schema.js +0 -160
- package/dist/db/migrations/schema.js.map +0 -1
- package/dist/db/schema.d.ts +0 -1576
- package/dist/db/schema.d.ts.map +0 -1
- package/dist/db/schema.js +0 -204
- package/dist/db/schema.js.map +0 -1
- package/dist/db/seed.d.ts +0 -4
- package/dist/db/seed.d.ts.map +0 -1
- package/dist/db/seed.js +0 -57
- package/dist/db/seed.js.map +0 -1
- package/dist/db/seedOAuth.d.ts +0 -4
- package/dist/db/seedOAuth.d.ts.map +0 -1
- package/dist/db/seedOAuth.js +0 -76
- package/dist/db/seedOAuth.js.map +0 -1
- package/dist/governance/config.d.ts +0 -66
- package/dist/governance/config.d.ts.map +0 -1
- package/dist/governance/config.js +0 -238
- package/dist/governance/config.js.map +0 -1
- package/dist/governance/detectors/hallucination.d.ts +0 -61
- package/dist/governance/detectors/hallucination.d.ts.map +0 -1
- package/dist/governance/detectors/hallucination.js +0 -338
- package/dist/governance/detectors/hallucination.js.map +0 -1
- package/dist/governance/detectors/inconsistency.d.ts +0 -99
- package/dist/governance/detectors/inconsistency.d.ts.map +0 -1
- package/dist/governance/detectors/inconsistency.js +0 -548
- package/dist/governance/detectors/inconsistency.js.map +0 -1
- package/dist/governance/detectors/toneDrift.d.ts +0 -63
- package/dist/governance/detectors/toneDrift.d.ts.map +0 -1
- package/dist/governance/detectors/toneDrift.js +0 -421
- package/dist/governance/detectors/toneDrift.js.map +0 -1
- package/dist/governance/detectors/unsafeReasoning.d.ts +0 -54
- package/dist/governance/detectors/unsafeReasoning.d.ts.map +0 -1
- package/dist/governance/detectors/unsafeReasoning.js +0 -473
- package/dist/governance/detectors/unsafeReasoning.js.map +0 -1
- package/dist/governance/evaluationEngine.d.ts +0 -112
- package/dist/governance/evaluationEngine.d.ts.map +0 -1
- package/dist/governance/evaluationEngine.js +0 -265
- package/dist/governance/evaluationEngine.js.map +0 -1
- package/dist/governance/intervention.d.ts +0 -81
- package/dist/governance/intervention.d.ts.map +0 -1
- package/dist/governance/intervention.js +0 -405
- package/dist/governance/intervention.js.map +0 -1
- package/dist/server/oauth/anomalyDetection.d.ts +0 -146
- package/dist/server/oauth/anomalyDetection.d.ts.map +0 -1
- package/dist/server/oauth/anomalyDetection.js +0 -405
- package/dist/server/oauth/anomalyDetection.js.map +0 -1
- package/dist/server/oauth/authServer.d.ts +0 -61
- package/dist/server/oauth/authServer.d.ts.map +0 -1
- package/dist/server/oauth/authServer.js +0 -283
- package/dist/server/oauth/authServer.js.map +0 -1
- package/dist/server/oauth/dpop.d.ts +0 -135
- package/dist/server/oauth/dpop.d.ts.map +0 -1
- package/dist/server/oauth/dpop.js +0 -338
- package/dist/server/oauth/dpop.js.map +0 -1
- package/dist/server/oauth/gdpr/consent.d.ts +0 -173
- package/dist/server/oauth/gdpr/consent.d.ts.map +0 -1
- package/dist/server/oauth/gdpr/consent.js +0 -388
- package/dist/server/oauth/gdpr/consent.js.map +0 -1
- package/dist/server/oauth/gdpr/dataPortability.d.ts +0 -214
- package/dist/server/oauth/gdpr/dataPortability.d.ts.map +0 -1
- package/dist/server/oauth/gdpr/dataPortability.js +0 -486
- package/dist/server/oauth/gdpr/dataPortability.js.map +0 -1
- package/dist/server/oauth/gdpr/index.d.ts +0 -103
- package/dist/server/oauth/gdpr/index.d.ts.map +0 -1
- package/dist/server/oauth/gdpr/index.js +0 -273
- package/dist/server/oauth/gdpr/index.js.map +0 -1
- package/dist/server/oauth/gdpr/rightToErasure.d.ts +0 -184
- package/dist/server/oauth/gdpr/rightToErasure.d.ts.map +0 -1
- package/dist/server/oauth/gdpr/rightToErasure.js +0 -527
- package/dist/server/oauth/gdpr/rightToErasure.js.map +0 -1
- package/dist/server/oauth/monitoring/securityMonitor.d.ts +0 -218
- package/dist/server/oauth/monitoring/securityMonitor.d.ts.map +0 -1
- package/dist/server/oauth/monitoring/securityMonitor.js +0 -615
- package/dist/server/oauth/monitoring/securityMonitor.js.map +0 -1
- package/dist/server/oauth/pkce.d.ts +0 -61
- package/dist/server/oauth/pkce.d.ts.map +0 -1
- package/dist/server/oauth/pkce.js +0 -157
- package/dist/server/oauth/pkce.js.map +0 -1
- package/dist/server/oauth/providers/base.d.ts +0 -147
- package/dist/server/oauth/providers/base.d.ts.map +0 -1
- package/dist/server/oauth/providers/base.js +0 -312
- package/dist/server/oauth/providers/base.js.map +0 -1
- package/dist/server/oauth/providers/github.d.ts +0 -55
- package/dist/server/oauth/providers/github.d.ts.map +0 -1
- package/dist/server/oauth/providers/github.js +0 -225
- package/dist/server/oauth/providers/github.js.map +0 -1
- package/dist/server/oauth/providers/google.d.ts +0 -49
- package/dist/server/oauth/providers/google.d.ts.map +0 -1
- package/dist/server/oauth/providers/google.js +0 -153
- package/dist/server/oauth/providers/google.js.map +0 -1
- package/dist/server/oauth/providers/index.d.ts +0 -9
- package/dist/server/oauth/providers/index.d.ts.map +0 -1
- package/dist/server/oauth/providers/index.js +0 -24
- package/dist/server/oauth/providers/index.js.map +0 -1
- package/dist/server/oauth/refreshTokenRotation.d.ts +0 -114
- package/dist/server/oauth/refreshTokenRotation.d.ts.map +0 -1
- package/dist/server/oauth/refreshTokenRotation.js +0 -344
- package/dist/server/oauth/refreshTokenRotation.js.map +0 -1
- package/dist/server/oauth/security.d.ts +0 -101
- package/dist/server/oauth/security.d.ts.map +0 -1
- package/dist/server/oauth/security.js +0 -268
- package/dist/server/oauth/security.js.map +0 -1
- package/dist/server/oauth/tokenEncryption.d.ts +0 -80
- package/dist/server/oauth/tokenEncryption.d.ts.map +0 -1
- package/dist/server/oauth/tokenEncryption.js +0 -218
- package/dist/server/oauth/tokenEncryption.js.map +0 -1
- package/dist/tools/sendMessage-complex-backup.d.ts +0 -6
- package/dist/tools/sendMessage-complex-backup.d.ts.map +0 -1
- package/dist/tools/sendMessage-complex-backup.js +0 -545
- package/dist/tools/sendMessage-complex-backup.js.map +0 -1
- package/dist/tools/sendMessage-revised.d.ts +0 -11
- package/dist/tools/sendMessage-revised.d.ts.map +0 -1
- package/dist/tools/sendMessage-revised.js +0 -429
- package/dist/tools/sendMessage-revised.js.map +0 -1
- package/dist/tools/sendMessage-truly-simple.d.ts +0 -8
- package/dist/tools/sendMessage-truly-simple.d.ts.map +0 -1
- package/dist/tools/sendMessage-truly-simple.js +0 -299
- package/dist/tools/sendMessage-truly-simple.js.map +0 -1
|
@@ -1,527 +0,0 @@
|
|
|
1
|
-
import { logger } from '../../../utils/logger.js';
|
|
2
|
-
import { getDb } from '../../../db/client.js';
|
|
3
|
-
import { createHash, randomBytes } from 'crypto';
|
|
4
|
-
/**
|
|
5
|
-
* Deletion scope options
|
|
6
|
-
*/
|
|
7
|
-
export var DeletionScope;
|
|
8
|
-
(function (DeletionScope) {
|
|
9
|
-
DeletionScope["FULL"] = "full";
|
|
10
|
-
DeletionScope["PARTIAL"] = "partial";
|
|
11
|
-
DeletionScope["ANONYMIZE"] = "anonymize";
|
|
12
|
-
DeletionScope["PSEUDONYMIZE"] = "pseudonymize";
|
|
13
|
-
DeletionScope["ARCHIVE"] = "archive";
|
|
14
|
-
})(DeletionScope || (DeletionScope = {}));
|
|
15
|
-
/**
|
|
16
|
-
* Data retention reasons (lawful basis to refuse deletion)
|
|
17
|
-
*/
|
|
18
|
-
export var RetentionReason;
|
|
19
|
-
(function (RetentionReason) {
|
|
20
|
-
RetentionReason["LEGAL_OBLIGATION"] = "legal_obligation";
|
|
21
|
-
RetentionReason["CONTRACT_FULFILLMENT"] = "contract";
|
|
22
|
-
RetentionReason["VITAL_INTERESTS"] = "vital_interests";
|
|
23
|
-
RetentionReason["PUBLIC_INTEREST"] = "public_interest";
|
|
24
|
-
RetentionReason["LEGAL_CLAIMS"] = "legal_claims";
|
|
25
|
-
RetentionReason["FREEDOM_OF_EXPRESSION"] = "expression";
|
|
26
|
-
RetentionReason["COMPLIANCE"] = "compliance";
|
|
27
|
-
RetentionReason["FINANCIAL_RECORDS"] = "financial";
|
|
28
|
-
RetentionReason["FRAUD_PREVENTION"] = "fraud";
|
|
29
|
-
})(RetentionReason || (RetentionReason = {}));
|
|
30
|
-
/**
|
|
31
|
-
* Deletion request status
|
|
32
|
-
*/
|
|
33
|
-
export var DeletionStatus;
|
|
34
|
-
(function (DeletionStatus) {
|
|
35
|
-
DeletionStatus["PENDING"] = "pending";
|
|
36
|
-
DeletionStatus["REVIEWING"] = "reviewing";
|
|
37
|
-
DeletionStatus["APPROVED"] = "approved";
|
|
38
|
-
DeletionStatus["IN_PROGRESS"] = "in_progress";
|
|
39
|
-
DeletionStatus["COMPLETED"] = "completed";
|
|
40
|
-
DeletionStatus["PARTIALLY_COMPLETED"] = "partially_completed";
|
|
41
|
-
DeletionStatus["REJECTED"] = "rejected";
|
|
42
|
-
DeletionStatus["CANCELLED"] = "cancelled";
|
|
43
|
-
})(DeletionStatus || (DeletionStatus = {}));
|
|
44
|
-
/**
|
|
45
|
-
* GDPR Right to Erasure Manager
|
|
46
|
-
* Implements GDPR Article 17 - Right to be forgotten
|
|
47
|
-
*/
|
|
48
|
-
export class RightToErasureManager {
|
|
49
|
-
VERIFICATION_EXPIRY = 3600000; // 1 hour
|
|
50
|
-
DELETION_DELAY_DAYS = 30; // Grace period
|
|
51
|
-
MAX_RETRY_ATTEMPTS = 3;
|
|
52
|
-
deletionQueue = new Map();
|
|
53
|
-
verificationTokens = new Map();
|
|
54
|
-
// Data categories and their deletion rules
|
|
55
|
-
dataCategories = [
|
|
56
|
-
{
|
|
57
|
-
name: 'profile',
|
|
58
|
-
table: 'users',
|
|
59
|
-
userIdColumn: 'id',
|
|
60
|
-
deletable: true,
|
|
61
|
-
anonymizable: true,
|
|
62
|
-
criticalData: true,
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
name: 'sessions',
|
|
66
|
-
table: 'sessions',
|
|
67
|
-
userIdColumn: 'user_id',
|
|
68
|
-
deletable: true,
|
|
69
|
-
retentionPeriod: 90, // Keep for 90 days for security
|
|
70
|
-
anonymizable: false,
|
|
71
|
-
criticalData: false,
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
name: 'insights',
|
|
75
|
-
table: 'insights',
|
|
76
|
-
userIdColumn: 'user_id',
|
|
77
|
-
deletable: true,
|
|
78
|
-
anonymizable: true,
|
|
79
|
-
criticalData: false,
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
name: 'oauth_tokens',
|
|
83
|
-
table: 'oauth_tokens',
|
|
84
|
-
userIdColumn: 'user_id',
|
|
85
|
-
deletable: true,
|
|
86
|
-
anonymizable: false,
|
|
87
|
-
criticalData: true,
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
name: 'audit_logs',
|
|
91
|
-
table: 'audit_logs',
|
|
92
|
-
userIdColumn: 'user_id',
|
|
93
|
-
deletable: false, // Keep for compliance
|
|
94
|
-
retentionPeriod: 2555, // 7 years
|
|
95
|
-
anonymizable: true,
|
|
96
|
-
criticalData: true,
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
name: 'financial_records',
|
|
100
|
-
table: 'transactions',
|
|
101
|
-
userIdColumn: 'user_id',
|
|
102
|
-
deletable: false, // Legal requirement
|
|
103
|
-
retentionPeriod: 2555, // 7 years
|
|
104
|
-
anonymizable: true,
|
|
105
|
-
criticalData: true,
|
|
106
|
-
},
|
|
107
|
-
];
|
|
108
|
-
/**
|
|
109
|
-
* Request account deletion
|
|
110
|
-
*/
|
|
111
|
-
async requestDeletion(userId, scope = DeletionScope.FULL, options) {
|
|
112
|
-
// Check for existing request
|
|
113
|
-
const existing = await this.getActiveDeletionRequest(userId);
|
|
114
|
-
if (existing) {
|
|
115
|
-
logger.warn(`Deletion request already exists for user ${userId}`);
|
|
116
|
-
return existing;
|
|
117
|
-
}
|
|
118
|
-
// Check for retention requirements
|
|
119
|
-
const retentionRequirements = await this.checkRetentionRequirements(userId);
|
|
120
|
-
if (retentionRequirements.mustRetain && scope === DeletionScope.FULL) {
|
|
121
|
-
throw new Error(`Cannot delete user data: ${retentionRequirements.reasons.join(', ')}`);
|
|
122
|
-
}
|
|
123
|
-
const requestId = this.generateRequestId(userId);
|
|
124
|
-
const now = new Date();
|
|
125
|
-
const request = {
|
|
126
|
-
id: requestId,
|
|
127
|
-
userId,
|
|
128
|
-
requestedAt: now,
|
|
129
|
-
requestedBy: options?.requestedBy || userId,
|
|
130
|
-
scope,
|
|
131
|
-
status: DeletionStatus.PENDING,
|
|
132
|
-
reason: options?.reason,
|
|
133
|
-
scheduledFor: options?.immediate
|
|
134
|
-
? now
|
|
135
|
-
: new Date(now.getTime() + this.DELETION_DELAY_DAYS * 86400000),
|
|
136
|
-
metadata: {
|
|
137
|
-
ipAddress: options?.ipAddress || '',
|
|
138
|
-
userAgent: options?.userAgent || '',
|
|
139
|
-
verified: options?.skipVerification || false,
|
|
140
|
-
notificationsSent: [],
|
|
141
|
-
},
|
|
142
|
-
};
|
|
143
|
-
// Generate verification token if needed
|
|
144
|
-
if (!options?.skipVerification) {
|
|
145
|
-
request.verificationToken = await this.generateVerificationToken(userId);
|
|
146
|
-
await this.sendVerificationEmail(userId, request.verificationToken);
|
|
147
|
-
}
|
|
148
|
-
// Store request
|
|
149
|
-
await this.storeDeletionRequest(request);
|
|
150
|
-
this.deletionQueue.set(requestId, request);
|
|
151
|
-
// If immediate and verified, start processing
|
|
152
|
-
if (options?.immediate && options?.skipVerification) {
|
|
153
|
-
await this.processDeletion(request);
|
|
154
|
-
}
|
|
155
|
-
logger.info(`Deletion request created for user ${userId}: ${requestId}`);
|
|
156
|
-
return request;
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Verify deletion request
|
|
160
|
-
*/
|
|
161
|
-
async verifyDeletion(requestId, verificationToken) {
|
|
162
|
-
const request = await this.getDeletionRequest(requestId);
|
|
163
|
-
if (!request) {
|
|
164
|
-
throw new Error('Deletion request not found');
|
|
165
|
-
}
|
|
166
|
-
if (request.status !== DeletionStatus.PENDING) {
|
|
167
|
-
throw new Error('Request already processed');
|
|
168
|
-
}
|
|
169
|
-
// Verify token
|
|
170
|
-
const tokenData = this.verificationTokens.get(verificationToken);
|
|
171
|
-
if (!tokenData || tokenData.userId !== request.userId) {
|
|
172
|
-
throw new Error('Invalid verification token');
|
|
173
|
-
}
|
|
174
|
-
if (new Date() > tokenData.expires) {
|
|
175
|
-
throw new Error('Verification token expired');
|
|
176
|
-
}
|
|
177
|
-
// Update request
|
|
178
|
-
request.status = DeletionStatus.APPROVED;
|
|
179
|
-
request.metadata.verified = true;
|
|
180
|
-
await this.updateDeletionRequest(request);
|
|
181
|
-
// Clean up token
|
|
182
|
-
this.verificationTokens.delete(verificationToken);
|
|
183
|
-
// Schedule deletion
|
|
184
|
-
if (request.scheduledFor && request.scheduledFor > new Date()) {
|
|
185
|
-
logger.info(`Deletion scheduled for ${request.scheduledFor}`);
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
188
|
-
await this.processDeletion(request);
|
|
189
|
-
}
|
|
190
|
-
return true;
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Process deletion request
|
|
194
|
-
*/
|
|
195
|
-
async processDeletion(request) {
|
|
196
|
-
try {
|
|
197
|
-
request.status = DeletionStatus.IN_PROGRESS;
|
|
198
|
-
await this.updateDeletionRequest(request);
|
|
199
|
-
const report = {
|
|
200
|
-
deletedCategories: [],
|
|
201
|
-
deletedRecords: 0,
|
|
202
|
-
retainedCategories: [],
|
|
203
|
-
thirdPartyNotifications: [],
|
|
204
|
-
};
|
|
205
|
-
// Create backup if configured
|
|
206
|
-
if (request.scope === DeletionScope.ARCHIVE) {
|
|
207
|
-
report.backupReference = await this.createBackup(request.userId);
|
|
208
|
-
}
|
|
209
|
-
// Notify third-party services first
|
|
210
|
-
const thirdPartyResults = await this.notifyThirdParties(request.userId);
|
|
211
|
-
report.thirdPartyNotifications = thirdPartyResults;
|
|
212
|
-
// Process each data category
|
|
213
|
-
for (const category of this.dataCategories) {
|
|
214
|
-
try {
|
|
215
|
-
const result = await this.processDataCategory(request.userId, category, request.scope);
|
|
216
|
-
if (result.deleted) {
|
|
217
|
-
report.deletedCategories.push(category.name);
|
|
218
|
-
report.deletedRecords += result.count;
|
|
219
|
-
}
|
|
220
|
-
else if (result.retained) {
|
|
221
|
-
report.retainedCategories?.push(category.name);
|
|
222
|
-
if (!request.retainedData) {
|
|
223
|
-
request.retainedData = [];
|
|
224
|
-
}
|
|
225
|
-
request.retainedData.push({
|
|
226
|
-
category: category.name,
|
|
227
|
-
reason: result.reason,
|
|
228
|
-
retentionPeriod: category.retentionPeriod,
|
|
229
|
-
legalBasis: this.getLegalBasis(result.reason),
|
|
230
|
-
});
|
|
231
|
-
}
|
|
232
|
-
if (result.anonymized) {
|
|
233
|
-
report.anonymizedRecords = (report.anonymizedRecords || 0) + result.count;
|
|
234
|
-
}
|
|
235
|
-
if (result.pseudonymized) {
|
|
236
|
-
report.pseudonymizedRecords = (report.pseudonymizedRecords || 0) + result.count;
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
catch (error) {
|
|
240
|
-
logger.error(`Failed to delete category ${category.name}:`, error);
|
|
241
|
-
// Continue with other categories
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
// Generate completion certificate
|
|
245
|
-
report.completionCertificate = await this.generateCompletionCertificate(request, report);
|
|
246
|
-
// Update request
|
|
247
|
-
request.status = report.retainedCategories?.length
|
|
248
|
-
? DeletionStatus.PARTIALLY_COMPLETED
|
|
249
|
-
: DeletionStatus.COMPLETED;
|
|
250
|
-
request.completedAt = new Date();
|
|
251
|
-
request.deletionReport = report;
|
|
252
|
-
await this.updateDeletionRequest(request);
|
|
253
|
-
// Send confirmation
|
|
254
|
-
await this.sendDeletionConfirmation(request.userId, report);
|
|
255
|
-
logger.info(`Deletion completed for user ${request.userId}: ${report.deletedRecords} records deleted`);
|
|
256
|
-
return report;
|
|
257
|
-
}
|
|
258
|
-
catch (error) {
|
|
259
|
-
logger.error(`Deletion failed for user ${request.userId}:`, error);
|
|
260
|
-
request.status = DeletionStatus.REJECTED;
|
|
261
|
-
request.rejectionReason = [RetentionReason.COMPLIANCE];
|
|
262
|
-
await this.updateDeletionRequest(request);
|
|
263
|
-
throw error;
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
/**
|
|
267
|
-
* Process individual data category
|
|
268
|
-
*/
|
|
269
|
-
async processDataCategory(userId, category, scope) {
|
|
270
|
-
const result = {
|
|
271
|
-
deleted: false,
|
|
272
|
-
retained: false,
|
|
273
|
-
anonymized: false,
|
|
274
|
-
pseudonymized: false,
|
|
275
|
-
count: 0,
|
|
276
|
-
reason: undefined,
|
|
277
|
-
};
|
|
278
|
-
// Check if category can be deleted
|
|
279
|
-
if (!category.deletable) {
|
|
280
|
-
result.retained = true;
|
|
281
|
-
result.reason = RetentionReason.LEGAL_OBLIGATION;
|
|
282
|
-
// Anonymize if possible
|
|
283
|
-
if (category.anonymizable && scope !== DeletionScope.PARTIAL) {
|
|
284
|
-
result.count = await this.anonymizeData(userId, category);
|
|
285
|
-
result.anonymized = true;
|
|
286
|
-
}
|
|
287
|
-
return result;
|
|
288
|
-
}
|
|
289
|
-
// Check retention period
|
|
290
|
-
if (category.retentionPeriod) {
|
|
291
|
-
const canDelete = await this.checkRetentionPeriod(userId, category);
|
|
292
|
-
if (!canDelete) {
|
|
293
|
-
result.retained = true;
|
|
294
|
-
result.reason = RetentionReason.COMPLIANCE;
|
|
295
|
-
return result;
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
// Process based on scope
|
|
299
|
-
switch (scope) {
|
|
300
|
-
case DeletionScope.FULL:
|
|
301
|
-
result.count = await this.deleteData(userId, category);
|
|
302
|
-
result.deleted = true;
|
|
303
|
-
break;
|
|
304
|
-
case DeletionScope.ANONYMIZE:
|
|
305
|
-
result.count = await this.anonymizeData(userId, category);
|
|
306
|
-
result.anonymized = true;
|
|
307
|
-
break;
|
|
308
|
-
case DeletionScope.PSEUDONYMIZE:
|
|
309
|
-
result.count = await this.pseudonymizeData(userId, category);
|
|
310
|
-
result.pseudonymized = true;
|
|
311
|
-
break;
|
|
312
|
-
case DeletionScope.ARCHIVE:
|
|
313
|
-
// Archive before deletion
|
|
314
|
-
await this.archiveData(userId, category);
|
|
315
|
-
result.count = await this.deleteData(userId, category);
|
|
316
|
-
result.deleted = true;
|
|
317
|
-
break;
|
|
318
|
-
case DeletionScope.PARTIAL:
|
|
319
|
-
// Selective deletion based on user preferences
|
|
320
|
-
result.count = await this.partialDeleteData(userId, category);
|
|
321
|
-
result.deleted = true;
|
|
322
|
-
break;
|
|
323
|
-
}
|
|
324
|
-
return result;
|
|
325
|
-
}
|
|
326
|
-
/**
|
|
327
|
-
* Delete user data from category
|
|
328
|
-
*/
|
|
329
|
-
async deleteData(userId, category) {
|
|
330
|
-
const db = getDb();
|
|
331
|
-
// In production, this would execute actual DELETE queries
|
|
332
|
-
logger.info(`Deleting ${category.name} for user ${userId}`);
|
|
333
|
-
// Return mock count
|
|
334
|
-
return Math.floor(Math.random() * 100);
|
|
335
|
-
}
|
|
336
|
-
/**
|
|
337
|
-
* Anonymize user data
|
|
338
|
-
*/
|
|
339
|
-
async anonymizeData(userId, category) {
|
|
340
|
-
const anonymousId = `anon_${createHash('sha256').update(userId).digest('hex').substring(0, 16)}`;
|
|
341
|
-
// Replace identifiable data with anonymous values
|
|
342
|
-
logger.info(`Anonymizing ${category.name} for user ${userId} -> ${anonymousId}`);
|
|
343
|
-
return Math.floor(Math.random() * 50);
|
|
344
|
-
}
|
|
345
|
-
/**
|
|
346
|
-
* Pseudonymize user data
|
|
347
|
-
*/
|
|
348
|
-
async pseudonymizeData(userId, category) {
|
|
349
|
-
const pseudonym = `user_${randomBytes(16).toString('hex')}`;
|
|
350
|
-
// Replace with pseudonym (reversible with key)
|
|
351
|
-
logger.info(`Pseudonymizing ${category.name} for user ${userId} -> ${pseudonym}`);
|
|
352
|
-
return Math.floor(Math.random() * 50);
|
|
353
|
-
}
|
|
354
|
-
/**
|
|
355
|
-
* Archive user data before deletion
|
|
356
|
-
*/
|
|
357
|
-
async archiveData(userId, category) {
|
|
358
|
-
// Create encrypted archive
|
|
359
|
-
const archiveId = `archive_${userId}_${category.name}_${Date.now()}`;
|
|
360
|
-
logger.info(`Archiving ${category.name} for user ${userId}: ${archiveId}`);
|
|
361
|
-
return archiveId;
|
|
362
|
-
}
|
|
363
|
-
/**
|
|
364
|
-
* Partial deletion based on preferences
|
|
365
|
-
*/
|
|
366
|
-
async partialDeleteData(userId, category) {
|
|
367
|
-
// Delete only non-essential data
|
|
368
|
-
logger.info(`Partial deletion of ${category.name} for user ${userId}`);
|
|
369
|
-
return Math.floor(Math.random() * 30);
|
|
370
|
-
}
|
|
371
|
-
/**
|
|
372
|
-
* Cancel deletion request
|
|
373
|
-
*/
|
|
374
|
-
async cancelDeletion(requestId, userId, reason) {
|
|
375
|
-
const request = await this.getDeletionRequest(requestId);
|
|
376
|
-
if (!request) {
|
|
377
|
-
throw new Error('Deletion request not found');
|
|
378
|
-
}
|
|
379
|
-
if (request.userId !== userId) {
|
|
380
|
-
throw new Error('Unauthorized to cancel this request');
|
|
381
|
-
}
|
|
382
|
-
if (request.status === DeletionStatus.COMPLETED ||
|
|
383
|
-
request.status === DeletionStatus.IN_PROGRESS) {
|
|
384
|
-
throw new Error('Cannot cancel request in this state');
|
|
385
|
-
}
|
|
386
|
-
request.status = DeletionStatus.CANCELLED;
|
|
387
|
-
await this.updateDeletionRequest(request);
|
|
388
|
-
logger.info(`Deletion cancelled for user ${userId}: ${reason || 'User request'}`);
|
|
389
|
-
return true;
|
|
390
|
-
}
|
|
391
|
-
/**
|
|
392
|
-
* Check retention requirements
|
|
393
|
-
*/
|
|
394
|
-
async checkRetentionRequirements(userId) {
|
|
395
|
-
const requirements = {
|
|
396
|
-
mustRetain: false,
|
|
397
|
-
reasons: [],
|
|
398
|
-
categories: [],
|
|
399
|
-
};
|
|
400
|
-
// Check for active legal holds
|
|
401
|
-
const hasLegalHold = await this.checkLegalHold(userId);
|
|
402
|
-
if (hasLegalHold) {
|
|
403
|
-
requirements.mustRetain = true;
|
|
404
|
-
requirements.reasons.push(RetentionReason.LEGAL_CLAIMS);
|
|
405
|
-
requirements.categories.push('all');
|
|
406
|
-
}
|
|
407
|
-
// Check for financial obligations
|
|
408
|
-
const hasFinancialObligations = await this.checkFinancialObligations(userId);
|
|
409
|
-
if (hasFinancialObligations) {
|
|
410
|
-
requirements.reasons.push(RetentionReason.FINANCIAL_RECORDS);
|
|
411
|
-
requirements.categories.push('financial_records');
|
|
412
|
-
}
|
|
413
|
-
// Check for fraud investigations
|
|
414
|
-
const underInvestigation = await this.checkFraudInvestigation(userId);
|
|
415
|
-
if (underInvestigation) {
|
|
416
|
-
requirements.mustRetain = true;
|
|
417
|
-
requirements.reasons.push(RetentionReason.FRAUD_PREVENTION);
|
|
418
|
-
requirements.categories.push('audit_logs', 'sessions');
|
|
419
|
-
}
|
|
420
|
-
return requirements;
|
|
421
|
-
}
|
|
422
|
-
/**
|
|
423
|
-
* Notify third-party services
|
|
424
|
-
*/
|
|
425
|
-
async notifyThirdParties(userId) {
|
|
426
|
-
const notifications = [];
|
|
427
|
-
// Notify Google
|
|
428
|
-
notifications.push({
|
|
429
|
-
provider: 'Google',
|
|
430
|
-
notified: true,
|
|
431
|
-
response: 'Deletion request acknowledged',
|
|
432
|
-
});
|
|
433
|
-
// Notify GitHub
|
|
434
|
-
notifications.push({
|
|
435
|
-
provider: 'GitHub',
|
|
436
|
-
notified: true,
|
|
437
|
-
response: 'User data queued for deletion',
|
|
438
|
-
});
|
|
439
|
-
return notifications;
|
|
440
|
-
}
|
|
441
|
-
/**
|
|
442
|
-
* Generate completion certificate
|
|
443
|
-
*/
|
|
444
|
-
async generateCompletionCertificate(request, report) {
|
|
445
|
-
const certificate = {
|
|
446
|
-
requestId: request.id,
|
|
447
|
-
userId: request.userId,
|
|
448
|
-
completedAt: new Date(),
|
|
449
|
-
deletedCategories: report.deletedCategories,
|
|
450
|
-
deletedRecords: report.deletedRecords,
|
|
451
|
-
retainedData: request.retainedData,
|
|
452
|
-
signature: '',
|
|
453
|
-
};
|
|
454
|
-
// Generate cryptographic signature
|
|
455
|
-
certificate.signature = createHash('sha256')
|
|
456
|
-
.update(JSON.stringify(certificate))
|
|
457
|
-
.digest('hex');
|
|
458
|
-
return Buffer.from(JSON.stringify(certificate)).toString('base64');
|
|
459
|
-
}
|
|
460
|
-
// Helper methods
|
|
461
|
-
generateRequestId(userId) {
|
|
462
|
-
return `del_${userId}_${Date.now()}_${randomBytes(4).toString('hex')}`;
|
|
463
|
-
}
|
|
464
|
-
async generateVerificationToken(userId) {
|
|
465
|
-
const token = randomBytes(32).toString('hex');
|
|
466
|
-
const expires = new Date(Date.now() + this.VERIFICATION_EXPIRY);
|
|
467
|
-
this.verificationTokens.set(token, { userId, expires });
|
|
468
|
-
return token;
|
|
469
|
-
}
|
|
470
|
-
getLegalBasis(reason) {
|
|
471
|
-
const legalBasis = {
|
|
472
|
-
[RetentionReason.LEGAL_OBLIGATION]: 'GDPR Article 17(3)(b) - Legal obligation',
|
|
473
|
-
[RetentionReason.CONTRACT_FULFILLMENT]: 'GDPR Article 17(3)(a) - Contract fulfillment',
|
|
474
|
-
[RetentionReason.VITAL_INTERESTS]: 'GDPR Article 17(3)(d) - Vital interests',
|
|
475
|
-
[RetentionReason.PUBLIC_INTEREST]: 'GDPR Article 17(3)(c) - Public interest',
|
|
476
|
-
[RetentionReason.LEGAL_CLAIMS]: 'GDPR Article 17(3)(e) - Legal claims',
|
|
477
|
-
[RetentionReason.FREEDOM_OF_EXPRESSION]: 'GDPR Article 17(3)(a) - Freedom of expression',
|
|
478
|
-
[RetentionReason.COMPLIANCE]: 'GDPR Article 17(3)(b) - Compliance',
|
|
479
|
-
[RetentionReason.FINANCIAL_RECORDS]: 'GDPR Article 17(3)(b) - Financial regulations',
|
|
480
|
-
[RetentionReason.FRAUD_PREVENTION]: 'GDPR Article 17(3)(e) - Fraud prevention',
|
|
481
|
-
};
|
|
482
|
-
return legalBasis[reason] || 'GDPR Article 17(3)';
|
|
483
|
-
}
|
|
484
|
-
// Database operations (mocked)
|
|
485
|
-
async getDeletionRequest(requestId) {
|
|
486
|
-
return this.deletionQueue.get(requestId) || null;
|
|
487
|
-
}
|
|
488
|
-
async getActiveDeletionRequest(userId) {
|
|
489
|
-
// Check database for active requests
|
|
490
|
-
return null;
|
|
491
|
-
}
|
|
492
|
-
async storeDeletionRequest(request) {
|
|
493
|
-
// Store in database
|
|
494
|
-
}
|
|
495
|
-
async updateDeletionRequest(request) {
|
|
496
|
-
// Update in database
|
|
497
|
-
}
|
|
498
|
-
async checkRetentionPeriod(userId, category) {
|
|
499
|
-
// Check if retention period has passed
|
|
500
|
-
return true;
|
|
501
|
-
}
|
|
502
|
-
async checkLegalHold(userId) {
|
|
503
|
-
// Check for legal holds
|
|
504
|
-
return false;
|
|
505
|
-
}
|
|
506
|
-
async checkFinancialObligations(userId) {
|
|
507
|
-
// Check for outstanding financial obligations
|
|
508
|
-
return false;
|
|
509
|
-
}
|
|
510
|
-
async checkFraudInvestigation(userId) {
|
|
511
|
-
// Check if user is under investigation
|
|
512
|
-
return false;
|
|
513
|
-
}
|
|
514
|
-
async createBackup(userId) {
|
|
515
|
-
// Create encrypted backup
|
|
516
|
-
return `backup_${userId}_${Date.now()}`;
|
|
517
|
-
}
|
|
518
|
-
async sendVerificationEmail(userId, token) {
|
|
519
|
-
logger.info(`Verification email sent to user ${userId}`);
|
|
520
|
-
}
|
|
521
|
-
async sendDeletionConfirmation(userId, report) {
|
|
522
|
-
logger.info(`Deletion confirmation sent to user ${userId}`);
|
|
523
|
-
}
|
|
524
|
-
}
|
|
525
|
-
// Export singleton instance
|
|
526
|
-
export const rightToErasureManager = new RightToErasureManager();
|
|
527
|
-
//# sourceMappingURL=rightToErasure.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rightToErasure.js","sourceRoot":"","sources":["../../../../src/server/oauth/gdpr/rightToErasure.ts"],"names":[],"mappings":"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"}
|