couchloop-eq-mcp 1.0.4 → 1.0.5
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 +23 -2
- 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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"refreshTokenRotation.js","sourceRoot":"","sources":["../../../src/server/oauth/refreshTokenRotation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* State data for CSRF protection
|
|
3
|
-
*/
|
|
4
|
-
export interface StateData {
|
|
5
|
-
clientId: string;
|
|
6
|
-
redirectUri: string;
|
|
7
|
-
nonce: string;
|
|
8
|
-
scope?: string;
|
|
9
|
-
codeChallenge?: string;
|
|
10
|
-
codeChallengeMethod?: 'S256' | 'plain';
|
|
11
|
-
createdAt: Date;
|
|
12
|
-
expiresAt: Date;
|
|
13
|
-
ipAddress?: string;
|
|
14
|
-
userAgent?: string;
|
|
15
|
-
fingerprint?: string;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* OAuth Security Manager
|
|
19
|
-
* Handles CSRF protection, state management, and nonce generation
|
|
20
|
-
*/
|
|
21
|
-
export declare class OAuthSecurity {
|
|
22
|
-
private stateStore;
|
|
23
|
-
private usedNonces;
|
|
24
|
-
private readonly STATE_TTL;
|
|
25
|
-
private readonly NONCE_TTL;
|
|
26
|
-
/**
|
|
27
|
-
* Generate a secure state token with embedded data
|
|
28
|
-
* Uses JWT for tamper-proof state management
|
|
29
|
-
*/
|
|
30
|
-
generateStateToken(data: Omit<StateData, 'createdAt' | 'expiresAt'>): Promise<string>;
|
|
31
|
-
/**
|
|
32
|
-
* Validate state token and extract data
|
|
33
|
-
* Prevents CSRF attacks by ensuring state matches
|
|
34
|
-
*/
|
|
35
|
-
validateState(token: string): Promise<StateData | null>;
|
|
36
|
-
/**
|
|
37
|
-
* Generate cryptographically secure nonce
|
|
38
|
-
* Used for OpenID Connect flows
|
|
39
|
-
*/
|
|
40
|
-
generateNonce(): string;
|
|
41
|
-
/**
|
|
42
|
-
* Validate nonce hasn't been used before
|
|
43
|
-
*/
|
|
44
|
-
validateNonce(nonce: string): boolean;
|
|
45
|
-
/**
|
|
46
|
-
* Generate browser fingerprint for additional security
|
|
47
|
-
* Combines multiple browser characteristics
|
|
48
|
-
*/
|
|
49
|
-
generateFingerprint(req: any): string;
|
|
50
|
-
/**
|
|
51
|
-
* Validate request fingerprint matches stored one
|
|
52
|
-
*/
|
|
53
|
-
validateFingerprint(stored: string | undefined, current: string): boolean;
|
|
54
|
-
/**
|
|
55
|
-
* Clean up expired states to prevent memory leak
|
|
56
|
-
*/
|
|
57
|
-
private cleanupExpiredStates;
|
|
58
|
-
/**
|
|
59
|
-
* Clean up old nonces to prevent memory leak
|
|
60
|
-
*/
|
|
61
|
-
private cleanupOldNonces;
|
|
62
|
-
/**
|
|
63
|
-
* Validate redirect URI against whitelist
|
|
64
|
-
* Prevents open redirect vulnerabilities
|
|
65
|
-
*/
|
|
66
|
-
validateRedirectUri(uri: string, clientId: string): boolean;
|
|
67
|
-
/**
|
|
68
|
-
* Get allowed redirect URIs for a client
|
|
69
|
-
* In production, this should query from database
|
|
70
|
-
*/
|
|
71
|
-
private getAllowedRedirectUris;
|
|
72
|
-
/**
|
|
73
|
-
* Validate authorization request parameters
|
|
74
|
-
* Comprehensive validation for security
|
|
75
|
-
*/
|
|
76
|
-
validateAuthorizationRequest(params: {
|
|
77
|
-
response_type: string;
|
|
78
|
-
client_id: string;
|
|
79
|
-
redirect_uri: string;
|
|
80
|
-
scope?: string;
|
|
81
|
-
state?: string;
|
|
82
|
-
code_challenge?: string;
|
|
83
|
-
code_challenge_method?: string;
|
|
84
|
-
}): {
|
|
85
|
-
valid: boolean;
|
|
86
|
-
error?: string;
|
|
87
|
-
};
|
|
88
|
-
/**
|
|
89
|
-
* Get statistics about stored states
|
|
90
|
-
*/
|
|
91
|
-
getStats(): {
|
|
92
|
-
states: number;
|
|
93
|
-
nonces: number;
|
|
94
|
-
};
|
|
95
|
-
/**
|
|
96
|
-
* Clear all states and nonces (for testing)
|
|
97
|
-
*/
|
|
98
|
-
clearAll(): void;
|
|
99
|
-
}
|
|
100
|
-
export declare const oauthSecurity: OAuthSecurity;
|
|
101
|
-
//# sourceMappingURL=security.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../../src/server/oauth/security.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAgC;IAClD,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAE5C;;;OAGG;IACG,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAkC3F;;;OAGG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IA2C7D;;;OAGG;IACH,aAAa,IAAI,MAAM;IAcvB;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAYrC;;;OAGG;IACH,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM;IAgBrC;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAczE;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;;OAGG;IACH,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAa3D;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAM9B;;;OAGG;IACH,4BAA4B,CAAC,MAAM,EAAE;QACnC,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;KAChC,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IA4DtC;;OAEG;IACH,QAAQ,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAS9C;;OAEG;IACH,QAAQ,IAAI,IAAI;CAKjB;AAGD,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
|
@@ -1,268 +0,0 @@
|
|
|
1
|
-
import { randomBytes, createHash } from 'crypto';
|
|
2
|
-
import { SignJWT, jwtVerify } from 'jose';
|
|
3
|
-
import { logger } from '../../utils/logger.js';
|
|
4
|
-
/**
|
|
5
|
-
* OAuth Security Manager
|
|
6
|
-
* Handles CSRF protection, state management, and nonce generation
|
|
7
|
-
*/
|
|
8
|
-
export class OAuthSecurity {
|
|
9
|
-
stateStore = new Map();
|
|
10
|
-
usedNonces = new Set();
|
|
11
|
-
STATE_TTL = 10 * 60 * 1000; // 10 minutes
|
|
12
|
-
NONCE_TTL = 60 * 60 * 1000; // 1 hour
|
|
13
|
-
/**
|
|
14
|
-
* Generate a secure state token with embedded data
|
|
15
|
-
* Uses JWT for tamper-proof state management
|
|
16
|
-
*/
|
|
17
|
-
async generateStateToken(data) {
|
|
18
|
-
const stateId = randomBytes(16).toString('base64url');
|
|
19
|
-
const now = new Date();
|
|
20
|
-
const expiresAt = new Date(now.getTime() + this.STATE_TTL);
|
|
21
|
-
const stateData = {
|
|
22
|
-
...data,
|
|
23
|
-
createdAt: now,
|
|
24
|
-
expiresAt,
|
|
25
|
-
};
|
|
26
|
-
// Store in memory for quick validation
|
|
27
|
-
this.stateStore.set(stateId, stateData);
|
|
28
|
-
// Create JWT with state data
|
|
29
|
-
const secret = new TextEncoder().encode(process.env.STATE_SECRET || 'dev-state-secret-change-in-production');
|
|
30
|
-
const jwt = await new SignJWT({
|
|
31
|
-
sid: stateId,
|
|
32
|
-
cid: data.clientId,
|
|
33
|
-
ruri: data.redirectUri,
|
|
34
|
-
nonce: data.nonce,
|
|
35
|
-
iat: Math.floor(now.getTime() / 1000),
|
|
36
|
-
exp: Math.floor(expiresAt.getTime() / 1000),
|
|
37
|
-
})
|
|
38
|
-
.setProtectedHeader({ alg: 'HS256' })
|
|
39
|
-
.setIssuedAt()
|
|
40
|
-
.setExpirationTime('10m')
|
|
41
|
-
.sign(secret);
|
|
42
|
-
logger.debug(`Generated state token for client ${data.clientId}`);
|
|
43
|
-
return jwt;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Validate state token and extract data
|
|
47
|
-
* Prevents CSRF attacks by ensuring state matches
|
|
48
|
-
*/
|
|
49
|
-
async validateState(token) {
|
|
50
|
-
try {
|
|
51
|
-
const secret = new TextEncoder().encode(process.env.STATE_SECRET || 'dev-state-secret-change-in-production');
|
|
52
|
-
// Verify JWT signature and expiration
|
|
53
|
-
const { payload } = await jwtVerify(token, secret, {
|
|
54
|
-
algorithms: ['HS256'],
|
|
55
|
-
});
|
|
56
|
-
const stateId = payload.sid;
|
|
57
|
-
const stateData = this.stateStore.get(stateId);
|
|
58
|
-
if (!stateData) {
|
|
59
|
-
logger.warn(`State data not found for ID ${stateId}`);
|
|
60
|
-
return null;
|
|
61
|
-
}
|
|
62
|
-
// Check expiration
|
|
63
|
-
if (new Date() > stateData.expiresAt) {
|
|
64
|
-
logger.warn(`State token expired for ID ${stateId}`);
|
|
65
|
-
this.stateStore.delete(stateId);
|
|
66
|
-
return null;
|
|
67
|
-
}
|
|
68
|
-
// Validate data consistency
|
|
69
|
-
if (stateData.clientId !== payload.cid ||
|
|
70
|
-
stateData.redirectUri !== payload.ruri ||
|
|
71
|
-
stateData.nonce !== payload.nonce) {
|
|
72
|
-
logger.error('State data mismatch - possible tampering detected');
|
|
73
|
-
return null;
|
|
74
|
-
}
|
|
75
|
-
// Remove used state to prevent replay
|
|
76
|
-
this.stateStore.delete(stateId);
|
|
77
|
-
logger.info(`State validation successful for client ${stateData.clientId}`);
|
|
78
|
-
return stateData;
|
|
79
|
-
}
|
|
80
|
-
catch (error) {
|
|
81
|
-
logger.error('State validation failed:', error);
|
|
82
|
-
return null;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Generate cryptographically secure nonce
|
|
87
|
-
* Used for OpenID Connect flows
|
|
88
|
-
*/
|
|
89
|
-
generateNonce() {
|
|
90
|
-
const nonce = randomBytes(16).toString('base64url');
|
|
91
|
-
const nonceHash = createHash('sha256').update(nonce).digest('hex');
|
|
92
|
-
// Store nonce hash to prevent replay
|
|
93
|
-
this.usedNonces.add(nonceHash);
|
|
94
|
-
// Clean old nonces periodically
|
|
95
|
-
this.cleanupOldNonces();
|
|
96
|
-
logger.debug('Generated new nonce');
|
|
97
|
-
return nonce;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Validate nonce hasn't been used before
|
|
101
|
-
*/
|
|
102
|
-
validateNonce(nonce) {
|
|
103
|
-
const nonceHash = createHash('sha256').update(nonce).digest('hex');
|
|
104
|
-
if (this.usedNonces.has(nonceHash)) {
|
|
105
|
-
logger.warn('Nonce replay detected');
|
|
106
|
-
return false;
|
|
107
|
-
}
|
|
108
|
-
this.usedNonces.add(nonceHash);
|
|
109
|
-
return true;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Generate browser fingerprint for additional security
|
|
113
|
-
* Combines multiple browser characteristics
|
|
114
|
-
*/
|
|
115
|
-
generateFingerprint(req) {
|
|
116
|
-
const components = [
|
|
117
|
-
req.headers['user-agent'] || '',
|
|
118
|
-
req.headers['accept-language'] || '',
|
|
119
|
-
req.headers['accept-encoding'] || '',
|
|
120
|
-
req.ip || req.connection.remoteAddress || '',
|
|
121
|
-
];
|
|
122
|
-
const fingerprint = createHash('sha256')
|
|
123
|
-
.update(components.join('|'))
|
|
124
|
-
.digest('base64url');
|
|
125
|
-
logger.debug('Generated browser fingerprint');
|
|
126
|
-
return fingerprint;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Validate request fingerprint matches stored one
|
|
130
|
-
*/
|
|
131
|
-
validateFingerprint(stored, current) {
|
|
132
|
-
if (!stored) {
|
|
133
|
-
return true; // No fingerprint stored, skip validation
|
|
134
|
-
}
|
|
135
|
-
const isValid = stored === current;
|
|
136
|
-
if (!isValid) {
|
|
137
|
-
logger.warn('Browser fingerprint mismatch - possible session hijacking');
|
|
138
|
-
}
|
|
139
|
-
return isValid;
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Clean up expired states to prevent memory leak
|
|
143
|
-
*/
|
|
144
|
-
cleanupExpiredStates() {
|
|
145
|
-
const now = new Date();
|
|
146
|
-
let cleaned = 0;
|
|
147
|
-
for (const [id, state] of this.stateStore.entries()) {
|
|
148
|
-
if (now > state.expiresAt) {
|
|
149
|
-
this.stateStore.delete(id);
|
|
150
|
-
cleaned++;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
if (cleaned > 0) {
|
|
154
|
-
logger.debug(`Cleaned up ${cleaned} expired states`);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Clean up old nonces to prevent memory leak
|
|
159
|
-
*/
|
|
160
|
-
cleanupOldNonces() {
|
|
161
|
-
// Keep only last 1000 nonces
|
|
162
|
-
if (this.usedNonces.size > 1000) {
|
|
163
|
-
const toKeep = Array.from(this.usedNonces).slice(-500);
|
|
164
|
-
this.usedNonces.clear();
|
|
165
|
-
toKeep.forEach(nonce => this.usedNonces.add(nonce));
|
|
166
|
-
logger.debug('Cleaned up old nonces');
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Validate redirect URI against whitelist
|
|
171
|
-
* Prevents open redirect vulnerabilities
|
|
172
|
-
*/
|
|
173
|
-
validateRedirectUri(uri, clientId) {
|
|
174
|
-
const allowedUris = this.getAllowedRedirectUris(clientId);
|
|
175
|
-
// Exact match required (OAuth 2.1 requirement)
|
|
176
|
-
const isValid = allowedUris.includes(uri);
|
|
177
|
-
if (!isValid) {
|
|
178
|
-
logger.error(`Invalid redirect URI: ${uri} for client ${clientId}`);
|
|
179
|
-
}
|
|
180
|
-
return isValid;
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Get allowed redirect URIs for a client
|
|
184
|
-
* In production, this should query from database
|
|
185
|
-
*/
|
|
186
|
-
getAllowedRedirectUris(clientId) {
|
|
187
|
-
// TODO: Fetch from database based on clientId
|
|
188
|
-
const uris = process.env[`${clientId.toUpperCase()}_REDIRECT_URIS`];
|
|
189
|
-
return uris ? uris.split(',') : [];
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Validate authorization request parameters
|
|
193
|
-
* Comprehensive validation for security
|
|
194
|
-
*/
|
|
195
|
-
validateAuthorizationRequest(params) {
|
|
196
|
-
// Response type must be 'code' (OAuth 2.1 - no implicit flow)
|
|
197
|
-
if (params.response_type !== 'code') {
|
|
198
|
-
return {
|
|
199
|
-
valid: false,
|
|
200
|
-
error: 'Invalid response_type. Only "code" is supported'
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
// Client ID required
|
|
204
|
-
if (!params.client_id) {
|
|
205
|
-
return {
|
|
206
|
-
valid: false,
|
|
207
|
-
error: 'Missing client_id'
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
// Redirect URI required and must be valid
|
|
211
|
-
if (!params.redirect_uri) {
|
|
212
|
-
return {
|
|
213
|
-
valid: false,
|
|
214
|
-
error: 'Missing redirect_uri'
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
if (!this.validateRedirectUri(params.redirect_uri, params.client_id)) {
|
|
218
|
-
return {
|
|
219
|
-
valid: false,
|
|
220
|
-
error: 'Invalid redirect_uri'
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
// State parameter required (CSRF protection)
|
|
224
|
-
if (!params.state) {
|
|
225
|
-
return {
|
|
226
|
-
valid: false,
|
|
227
|
-
error: 'Missing state parameter'
|
|
228
|
-
};
|
|
229
|
-
}
|
|
230
|
-
// PKCE required for all clients (OAuth 2.1)
|
|
231
|
-
if (!params.code_challenge) {
|
|
232
|
-
return {
|
|
233
|
-
valid: false,
|
|
234
|
-
error: 'Missing code_challenge (PKCE required)'
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
// S256 method required (plain is deprecated)
|
|
238
|
-
if (params.code_challenge_method && params.code_challenge_method !== 'S256') {
|
|
239
|
-
return {
|
|
240
|
-
valid: false,
|
|
241
|
-
error: 'Invalid code_challenge_method. Only S256 is supported'
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
logger.info(`Authorization request validated for client ${params.client_id}`);
|
|
245
|
-
return { valid: true };
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* Get statistics about stored states
|
|
249
|
-
*/
|
|
250
|
-
getStats() {
|
|
251
|
-
this.cleanupExpiredStates();
|
|
252
|
-
return {
|
|
253
|
-
states: this.stateStore.size,
|
|
254
|
-
nonces: this.usedNonces.size,
|
|
255
|
-
};
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Clear all states and nonces (for testing)
|
|
259
|
-
*/
|
|
260
|
-
clearAll() {
|
|
261
|
-
this.stateStore.clear();
|
|
262
|
-
this.usedNonces.clear();
|
|
263
|
-
logger.debug('Cleared all states and nonces');
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
// Export singleton instance
|
|
267
|
-
export const oauthSecurity = new OAuthSecurity();
|
|
268
|
-
//# sourceMappingURL=security.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../../src/server/oauth/security.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Encrypted token structure
|
|
3
|
-
*/
|
|
4
|
-
export interface EncryptedToken {
|
|
5
|
-
encrypted: string;
|
|
6
|
-
hash: string;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Token Encryption Manager
|
|
10
|
-
* Provides AES-256-GCM encryption for tokens at rest
|
|
11
|
-
*/
|
|
12
|
-
export declare class TokenEncryption {
|
|
13
|
-
private readonly algorithm;
|
|
14
|
-
private readonly saltLength;
|
|
15
|
-
private readonly tagLength;
|
|
16
|
-
private readonly ivLength;
|
|
17
|
-
private readonly keyLength;
|
|
18
|
-
/**
|
|
19
|
-
* Encrypt a token using AES-256-GCM
|
|
20
|
-
* Returns encrypted data and a hash for indexing
|
|
21
|
-
*/
|
|
22
|
-
encryptToken(plaintext: string): Promise<EncryptedToken>;
|
|
23
|
-
/**
|
|
24
|
-
* Decrypt a token
|
|
25
|
-
*/
|
|
26
|
-
decryptToken(encryptedData: string): Promise<string>;
|
|
27
|
-
/**
|
|
28
|
-
* Hash a token for indexing
|
|
29
|
-
* Uses SHA256 for consistent hashing
|
|
30
|
-
*/
|
|
31
|
-
hashToken(token: string): string;
|
|
32
|
-
/**
|
|
33
|
-
* Verify a plaintext token matches a hash
|
|
34
|
-
*/
|
|
35
|
-
verifyTokenHash(plaintext: string, hash: string): boolean;
|
|
36
|
-
/**
|
|
37
|
-
* Encrypt sensitive data (generic, not just tokens)
|
|
38
|
-
*/
|
|
39
|
-
encrypt(text: string): Promise<string>;
|
|
40
|
-
/**
|
|
41
|
-
* Decrypt sensitive data (generic)
|
|
42
|
-
*/
|
|
43
|
-
decrypt(encryptedData: string): Promise<string>;
|
|
44
|
-
/**
|
|
45
|
-
* Derive encryption key from password and salt
|
|
46
|
-
* Uses scrypt for key derivation
|
|
47
|
-
*/
|
|
48
|
-
private deriveKey;
|
|
49
|
-
/**
|
|
50
|
-
* Get the master encryption key
|
|
51
|
-
* In production, this should come from a secure key management service
|
|
52
|
-
*/
|
|
53
|
-
private getEncryptionKey;
|
|
54
|
-
/**
|
|
55
|
-
* Rotate encryption (re-encrypt with new salt/IV)
|
|
56
|
-
* Useful for key rotation scenarios
|
|
57
|
-
*/
|
|
58
|
-
rotateEncryption(encryptedData: string): Promise<EncryptedToken>;
|
|
59
|
-
/**
|
|
60
|
-
* Batch encrypt multiple tokens
|
|
61
|
-
* More efficient than individual encryption
|
|
62
|
-
*/
|
|
63
|
-
encryptBatch(tokens: string[]): Promise<EncryptedToken[]>;
|
|
64
|
-
/**
|
|
65
|
-
* Batch decrypt multiple tokens
|
|
66
|
-
*/
|
|
67
|
-
decryptBatch(encryptedTokens: string[]): Promise<string[]>;
|
|
68
|
-
/**
|
|
69
|
-
* Generate a secure random token
|
|
70
|
-
* Useful for generating access/refresh tokens
|
|
71
|
-
*/
|
|
72
|
-
generateSecureToken(length?: number): string;
|
|
73
|
-
/**
|
|
74
|
-
* Validate encryption key on startup
|
|
75
|
-
* Ensures the key meets security requirements
|
|
76
|
-
*/
|
|
77
|
-
validateEncryptionSetup(): boolean;
|
|
78
|
-
}
|
|
79
|
-
export declare const tokenEncryption: TokenEncryption;
|
|
80
|
-
//# sourceMappingURL=tokenEncryption.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tokenEncryption.d.ts","sourceRoot":"","sources":["../../../src/server/oauth/tokenEncryption.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAM;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAM;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAM;IAEhC;;;OAGG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAyC9D;;OAEG;IACG,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA8C1D;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAQhC;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAkBzD;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK5C;;OAEG;IACG,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrD;;;OAGG;YACW,SAAS;IAKvB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAexB;;;OAGG;IACG,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAQtE;;;OAGG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAI/D;;OAEG;IACG,YAAY,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIhE;;;OAGG;IACH,mBAAmB,CAAC,MAAM,GAAE,MAAW,GAAG,MAAM;IAIhD;;;OAGG;IACH,uBAAuB,IAAI,OAAO;CA4BnC;AAGD,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
|