couchloop-eq-mcp 1.0.3 → 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.
Files changed (285) hide show
  1. package/README.md +24 -11
  2. package/dist/clients/shrinkChatClient.js +1 -1
  3. package/dist/clients/shrinkChatClient.js.map +1 -1
  4. package/dist/developer/analyzers/bloat-detector.d.ts +89 -0
  5. package/dist/developer/analyzers/bloat-detector.d.ts.map +1 -0
  6. package/dist/developer/analyzers/bloat-detector.js +483 -0
  7. package/dist/developer/analyzers/bloat-detector.js.map +1 -0
  8. package/dist/developer/backup/auto-backup.d.ts +96 -0
  9. package/dist/developer/backup/auto-backup.d.ts.map +1 -0
  10. package/dist/developer/backup/auto-backup.js +346 -0
  11. package/dist/developer/backup/auto-backup.js.map +1 -0
  12. package/dist/developer/blockers/package-blocker.d.ts +33 -0
  13. package/dist/developer/blockers/package-blocker.d.ts.map +1 -0
  14. package/dist/developer/blockers/package-blocker.js +224 -0
  15. package/dist/developer/blockers/package-blocker.js.map +1 -0
  16. package/dist/developer/evaluators/ai-error-preventer.d.ts +54 -0
  17. package/dist/developer/evaluators/ai-error-preventer.d.ts.map +1 -0
  18. package/dist/developer/evaluators/ai-error-preventer.js +270 -0
  19. package/dist/developer/evaluators/ai-error-preventer.js.map +1 -0
  20. package/dist/developer/evaluators/build-context-detector.d.ts +44 -0
  21. package/dist/developer/evaluators/build-context-detector.d.ts.map +1 -0
  22. package/dist/developer/evaluators/build-context-detector.js +258 -0
  23. package/dist/developer/evaluators/build-context-detector.js.map +1 -0
  24. package/dist/developer/evaluators/package-evaluator.d.ts +37 -0
  25. package/dist/developer/evaluators/package-evaluator.d.ts.map +1 -0
  26. package/dist/developer/evaluators/package-evaluator.js +278 -0
  27. package/dist/developer/evaluators/package-evaluator.js.map +1 -0
  28. package/dist/developer/guards/file-guardian.d.ts +79 -0
  29. package/dist/developer/guards/file-guardian.d.ts.map +1 -0
  30. package/dist/developer/guards/file-guardian.js +309 -0
  31. package/dist/developer/guards/file-guardian.js.map +1 -0
  32. package/dist/developer/managers/context-manager.d.ts +61 -0
  33. package/dist/developer/managers/context-manager.d.ts.map +1 -0
  34. package/dist/developer/managers/context-manager.js +302 -0
  35. package/dist/developer/managers/context-manager.js.map +1 -0
  36. package/dist/developer/metrics/complexity-calculator.d.ts +52 -0
  37. package/dist/developer/metrics/complexity-calculator.d.ts.map +1 -0
  38. package/dist/developer/metrics/complexity-calculator.js +259 -0
  39. package/dist/developer/metrics/complexity-calculator.js.map +1 -0
  40. package/dist/developer/reports/review-summary.d.ts +49 -0
  41. package/dist/developer/reports/review-summary.d.ts.map +1 -0
  42. package/dist/developer/reports/review-summary.js +249 -0
  43. package/dist/developer/reports/review-summary.js.map +1 -0
  44. package/dist/developer/scanners/review-assistant.d.ts +41 -0
  45. package/dist/developer/scanners/review-assistant.d.ts.map +1 -0
  46. package/dist/developer/scanners/review-assistant.js +374 -0
  47. package/dist/developer/scanners/review-assistant.js.map +1 -0
  48. package/dist/developer/scanners/secret-scanner.d.ts +66 -0
  49. package/dist/developer/scanners/secret-scanner.d.ts.map +1 -0
  50. package/dist/developer/scanners/secret-scanner.js +287 -0
  51. package/dist/developer/scanners/secret-scanner.js.map +1 -0
  52. package/dist/developer/scanners/sql-injection-detector.d.ts +54 -0
  53. package/dist/developer/scanners/sql-injection-detector.d.ts.map +1 -0
  54. package/dist/developer/scanners/sql-injection-detector.js +174 -0
  55. package/dist/developer/scanners/sql-injection-detector.js.map +1 -0
  56. package/dist/developer/scanners/xss-detector.d.ts +60 -0
  57. package/dist/developer/scanners/xss-detector.d.ts.map +1 -0
  58. package/dist/developer/scanners/xss-detector.js +229 -0
  59. package/dist/developer/scanners/xss-detector.js.map +1 -0
  60. package/dist/developer/types/ai-errors.d.ts +34 -0
  61. package/dist/developer/types/ai-errors.d.ts.map +1 -0
  62. package/dist/developer/types/ai-errors.js +271 -0
  63. package/dist/developer/types/ai-errors.js.map +1 -0
  64. package/dist/developer/types/package.d.ts +32 -0
  65. package/dist/developer/types/package.d.ts.map +1 -0
  66. package/dist/developer/types/package.js +5 -0
  67. package/dist/developer/types/package.js.map +1 -0
  68. package/dist/developer/updaters/dependency-updater.d.ts +102 -0
  69. package/dist/developer/updaters/dependency-updater.d.ts.map +1 -0
  70. package/dist/developer/updaters/dependency-updater.js +472 -0
  71. package/dist/developer/updaters/dependency-updater.js.map +1 -0
  72. package/dist/developer/validators/cargo.d.ts +14 -0
  73. package/dist/developer/validators/cargo.d.ts.map +1 -0
  74. package/dist/developer/validators/cargo.js +132 -0
  75. package/dist/developer/validators/cargo.js.map +1 -0
  76. package/dist/developer/validators/gem.d.ts +14 -0
  77. package/dist/developer/validators/gem.d.ts.map +1 -0
  78. package/dist/developer/validators/gem.js +85 -0
  79. package/dist/developer/validators/gem.js.map +1 -0
  80. package/dist/developer/validators/go.d.ts +14 -0
  81. package/dist/developer/validators/go.d.ts.map +1 -0
  82. package/dist/developer/validators/go.js +138 -0
  83. package/dist/developer/validators/go.js.map +1 -0
  84. package/dist/developer/validators/maven.d.ts +14 -0
  85. package/dist/developer/validators/maven.d.ts.map +1 -0
  86. package/dist/developer/validators/maven.js +99 -0
  87. package/dist/developer/validators/maven.js.map +1 -0
  88. package/dist/developer/validators/npm.d.ts +14 -0
  89. package/dist/developer/validators/npm.d.ts.map +1 -0
  90. package/dist/developer/validators/npm.js +96 -0
  91. package/dist/developer/validators/npm.js.map +1 -0
  92. package/dist/developer/validators/nuget.d.ts +15 -0
  93. package/dist/developer/validators/nuget.d.ts.map +1 -0
  94. package/dist/developer/validators/nuget.js +107 -0
  95. package/dist/developer/validators/nuget.js.map +1 -0
  96. package/dist/developer/validators/pypi.d.ts +14 -0
  97. package/dist/developer/validators/pypi.d.ts.map +1 -0
  98. package/dist/developer/validators/pypi.js +118 -0
  99. package/dist/developer/validators/pypi.js.map +1 -0
  100. package/dist/developer/validators/registry-manager.d.ts +37 -0
  101. package/dist/developer/validators/registry-manager.d.ts.map +1 -0
  102. package/dist/developer/validators/registry-manager.js +89 -0
  103. package/dist/developer/validators/registry-manager.js.map +1 -0
  104. package/dist/developer/validators/version-checker.d.ts +145 -0
  105. package/dist/developer/validators/version-checker.d.ts.map +1 -0
  106. package/dist/developer/validators/version-checker.js +529 -0
  107. package/dist/developer/validators/version-checker.js.map +1 -0
  108. package/dist/server/index.js.map +1 -1
  109. package/dist/server/middleware/auth.d.ts +7 -9
  110. package/dist/server/middleware/auth.d.ts.map +1 -1
  111. package/dist/server/middleware/auth.js.map +1 -1
  112. package/dist/tools/check-versions.d.ts +100 -0
  113. package/dist/tools/check-versions.d.ts.map +1 -0
  114. package/dist/tools/check-versions.js +328 -0
  115. package/dist/tools/check-versions.js.map +1 -0
  116. package/dist/tools/detect-code-smell.d.ts +9 -0
  117. package/dist/tools/detect-code-smell.d.ts.map +1 -0
  118. package/dist/tools/detect-code-smell.js +231 -0
  119. package/dist/tools/detect-code-smell.js.map +1 -0
  120. package/dist/tools/index.d.ts +471 -0
  121. package/dist/tools/index.d.ts.map +1 -1
  122. package/dist/tools/index.js +178 -0
  123. package/dist/tools/index.js.map +1 -1
  124. package/dist/tools/journey.js +1 -1
  125. package/dist/tools/journey.js.map +1 -1
  126. package/dist/tools/pre-review-code.d.ts +71 -0
  127. package/dist/tools/pre-review-code.d.ts.map +1 -0
  128. package/dist/tools/pre-review-code.js +159 -0
  129. package/dist/tools/pre-review-code.js.map +1 -0
  130. package/dist/tools/preserve-context.d.ts +27 -0
  131. package/dist/tools/preserve-context.d.ts.map +1 -0
  132. package/dist/tools/preserve-context.js +98 -0
  133. package/dist/tools/preserve-context.js.map +1 -0
  134. package/dist/tools/protect-files.d.ts +224 -0
  135. package/dist/tools/protect-files.d.ts.map +1 -0
  136. package/dist/tools/protect-files.js +286 -0
  137. package/dist/tools/protect-files.js.map +1 -0
  138. package/dist/tools/scan-security.d.ts +38 -0
  139. package/dist/tools/scan-security.d.ts.map +1 -0
  140. package/dist/tools/scan-security.js +237 -0
  141. package/dist/tools/scan-security.js.map +1 -0
  142. package/dist/tools/validate_packages.d.ts +8 -0
  143. package/dist/tools/validate_packages.d.ts.map +1 -0
  144. package/dist/tools/validate_packages.js +159 -0
  145. package/dist/tools/validate_packages.js.map +1 -0
  146. package/dist/types/auth.d.ts +18 -18
  147. package/dist/types/auth.d.ts.map +1 -1
  148. package/dist/types/auth.js +91 -36
  149. package/dist/types/auth.js.map +1 -1
  150. package/dist/types/context.d.ts +46 -0
  151. package/dist/types/context.d.ts.map +1 -0
  152. package/dist/types/context.js +17 -0
  153. package/dist/types/context.js.map +1 -0
  154. package/dist/types/file-protection.d.ts +50 -0
  155. package/dist/types/file-protection.d.ts.map +1 -0
  156. package/dist/types/file-protection.js +9 -0
  157. package/dist/types/file-protection.js.map +1 -0
  158. package/dist/utils/errorHandler.d.ts.map +1 -1
  159. package/dist/utils/errorHandler.js +2 -1
  160. package/dist/utils/errorHandler.js.map +1 -1
  161. package/package.json +23 -2
  162. package/dist/db/migrate.d.ts +0 -4
  163. package/dist/db/migrate.d.ts.map +0 -1
  164. package/dist/db/migrate.js +0 -34
  165. package/dist/db/migrate.js.map +0 -1
  166. package/dist/db/migrations/schema.d.ts +0 -1074
  167. package/dist/db/migrations/schema.d.ts.map +0 -1
  168. package/dist/db/migrations/schema.js +0 -160
  169. package/dist/db/migrations/schema.js.map +0 -1
  170. package/dist/db/schema.d.ts +0 -1576
  171. package/dist/db/schema.d.ts.map +0 -1
  172. package/dist/db/schema.js +0 -204
  173. package/dist/db/schema.js.map +0 -1
  174. package/dist/db/seed.d.ts +0 -4
  175. package/dist/db/seed.d.ts.map +0 -1
  176. package/dist/db/seed.js +0 -57
  177. package/dist/db/seed.js.map +0 -1
  178. package/dist/db/seedOAuth.d.ts +0 -4
  179. package/dist/db/seedOAuth.d.ts.map +0 -1
  180. package/dist/db/seedOAuth.js +0 -76
  181. package/dist/db/seedOAuth.js.map +0 -1
  182. package/dist/governance/config.d.ts +0 -66
  183. package/dist/governance/config.d.ts.map +0 -1
  184. package/dist/governance/config.js +0 -238
  185. package/dist/governance/config.js.map +0 -1
  186. package/dist/governance/detectors/hallucination.d.ts +0 -61
  187. package/dist/governance/detectors/hallucination.d.ts.map +0 -1
  188. package/dist/governance/detectors/hallucination.js +0 -338
  189. package/dist/governance/detectors/hallucination.js.map +0 -1
  190. package/dist/governance/detectors/inconsistency.d.ts +0 -99
  191. package/dist/governance/detectors/inconsistency.d.ts.map +0 -1
  192. package/dist/governance/detectors/inconsistency.js +0 -548
  193. package/dist/governance/detectors/inconsistency.js.map +0 -1
  194. package/dist/governance/detectors/toneDrift.d.ts +0 -63
  195. package/dist/governance/detectors/toneDrift.d.ts.map +0 -1
  196. package/dist/governance/detectors/toneDrift.js +0 -421
  197. package/dist/governance/detectors/toneDrift.js.map +0 -1
  198. package/dist/governance/detectors/unsafeReasoning.d.ts +0 -54
  199. package/dist/governance/detectors/unsafeReasoning.d.ts.map +0 -1
  200. package/dist/governance/detectors/unsafeReasoning.js +0 -473
  201. package/dist/governance/detectors/unsafeReasoning.js.map +0 -1
  202. package/dist/governance/evaluationEngine.d.ts +0 -112
  203. package/dist/governance/evaluationEngine.d.ts.map +0 -1
  204. package/dist/governance/evaluationEngine.js +0 -265
  205. package/dist/governance/evaluationEngine.js.map +0 -1
  206. package/dist/governance/intervention.d.ts +0 -81
  207. package/dist/governance/intervention.d.ts.map +0 -1
  208. package/dist/governance/intervention.js +0 -405
  209. package/dist/governance/intervention.js.map +0 -1
  210. package/dist/server/oauth/anomalyDetection.d.ts +0 -146
  211. package/dist/server/oauth/anomalyDetection.d.ts.map +0 -1
  212. package/dist/server/oauth/anomalyDetection.js +0 -405
  213. package/dist/server/oauth/anomalyDetection.js.map +0 -1
  214. package/dist/server/oauth/authServer.d.ts +0 -61
  215. package/dist/server/oauth/authServer.d.ts.map +0 -1
  216. package/dist/server/oauth/authServer.js +0 -283
  217. package/dist/server/oauth/authServer.js.map +0 -1
  218. package/dist/server/oauth/dpop.d.ts +0 -135
  219. package/dist/server/oauth/dpop.d.ts.map +0 -1
  220. package/dist/server/oauth/dpop.js +0 -338
  221. package/dist/server/oauth/dpop.js.map +0 -1
  222. package/dist/server/oauth/gdpr/consent.d.ts +0 -173
  223. package/dist/server/oauth/gdpr/consent.d.ts.map +0 -1
  224. package/dist/server/oauth/gdpr/consent.js +0 -388
  225. package/dist/server/oauth/gdpr/consent.js.map +0 -1
  226. package/dist/server/oauth/gdpr/dataPortability.d.ts +0 -214
  227. package/dist/server/oauth/gdpr/dataPortability.d.ts.map +0 -1
  228. package/dist/server/oauth/gdpr/dataPortability.js +0 -486
  229. package/dist/server/oauth/gdpr/dataPortability.js.map +0 -1
  230. package/dist/server/oauth/gdpr/index.d.ts +0 -103
  231. package/dist/server/oauth/gdpr/index.d.ts.map +0 -1
  232. package/dist/server/oauth/gdpr/index.js +0 -273
  233. package/dist/server/oauth/gdpr/index.js.map +0 -1
  234. package/dist/server/oauth/gdpr/rightToErasure.d.ts +0 -184
  235. package/dist/server/oauth/gdpr/rightToErasure.d.ts.map +0 -1
  236. package/dist/server/oauth/gdpr/rightToErasure.js +0 -527
  237. package/dist/server/oauth/gdpr/rightToErasure.js.map +0 -1
  238. package/dist/server/oauth/monitoring/securityMonitor.d.ts +0 -218
  239. package/dist/server/oauth/monitoring/securityMonitor.d.ts.map +0 -1
  240. package/dist/server/oauth/monitoring/securityMonitor.js +0 -615
  241. package/dist/server/oauth/monitoring/securityMonitor.js.map +0 -1
  242. package/dist/server/oauth/pkce.d.ts +0 -61
  243. package/dist/server/oauth/pkce.d.ts.map +0 -1
  244. package/dist/server/oauth/pkce.js +0 -157
  245. package/dist/server/oauth/pkce.js.map +0 -1
  246. package/dist/server/oauth/providers/base.d.ts +0 -147
  247. package/dist/server/oauth/providers/base.d.ts.map +0 -1
  248. package/dist/server/oauth/providers/base.js +0 -312
  249. package/dist/server/oauth/providers/base.js.map +0 -1
  250. package/dist/server/oauth/providers/github.d.ts +0 -55
  251. package/dist/server/oauth/providers/github.d.ts.map +0 -1
  252. package/dist/server/oauth/providers/github.js +0 -225
  253. package/dist/server/oauth/providers/github.js.map +0 -1
  254. package/dist/server/oauth/providers/google.d.ts +0 -49
  255. package/dist/server/oauth/providers/google.d.ts.map +0 -1
  256. package/dist/server/oauth/providers/google.js +0 -153
  257. package/dist/server/oauth/providers/google.js.map +0 -1
  258. package/dist/server/oauth/providers/index.d.ts +0 -9
  259. package/dist/server/oauth/providers/index.d.ts.map +0 -1
  260. package/dist/server/oauth/providers/index.js +0 -24
  261. package/dist/server/oauth/providers/index.js.map +0 -1
  262. package/dist/server/oauth/refreshTokenRotation.d.ts +0 -114
  263. package/dist/server/oauth/refreshTokenRotation.d.ts.map +0 -1
  264. package/dist/server/oauth/refreshTokenRotation.js +0 -344
  265. package/dist/server/oauth/refreshTokenRotation.js.map +0 -1
  266. package/dist/server/oauth/security.d.ts +0 -101
  267. package/dist/server/oauth/security.d.ts.map +0 -1
  268. package/dist/server/oauth/security.js +0 -268
  269. package/dist/server/oauth/security.js.map +0 -1
  270. package/dist/server/oauth/tokenEncryption.d.ts +0 -80
  271. package/dist/server/oauth/tokenEncryption.d.ts.map +0 -1
  272. package/dist/server/oauth/tokenEncryption.js +0 -218
  273. package/dist/server/oauth/tokenEncryption.js.map +0 -1
  274. package/dist/tools/sendMessage-complex-backup.d.ts +0 -6
  275. package/dist/tools/sendMessage-complex-backup.d.ts.map +0 -1
  276. package/dist/tools/sendMessage-complex-backup.js +0 -545
  277. package/dist/tools/sendMessage-complex-backup.js.map +0 -1
  278. package/dist/tools/sendMessage-revised.d.ts +0 -11
  279. package/dist/tools/sendMessage-revised.d.ts.map +0 -1
  280. package/dist/tools/sendMessage-revised.js +0 -429
  281. package/dist/tools/sendMessage-revised.js.map +0 -1
  282. package/dist/tools/sendMessage-truly-simple.d.ts +0 -8
  283. package/dist/tools/sendMessage-truly-simple.d.ts.map +0 -1
  284. package/dist/tools/sendMessage-truly-simple.js +0 -299
  285. package/dist/tools/sendMessage-truly-simple.js.map +0 -1
@@ -1,405 +0,0 @@
1
- import { createHash } from 'crypto';
2
- import { logger } from '../../utils/logger.js';
3
- import { getDb } from '../../db/client.js';
4
- /**
5
- * Anomaly Detection System
6
- * Detects suspicious authentication patterns and potential attacks
7
- */
8
- export class AnomalyDetector {
9
- userProfiles = new Map();
10
- ipReputation = new Map();
11
- MAX_FAILED_ATTEMPTS = 5;
12
- IMPOSSIBLE_TRAVEL_SPEED = 900; // km/h
13
- TIME_WINDOW = 3600000; // 1 hour
14
- riskFactors = {
15
- vpnWeight: 0.3,
16
- torWeight: 0.8,
17
- proxyWeight: 0.4,
18
- newDeviceWeight: 0.2,
19
- newLocationWeight: 0.25,
20
- impossibleTravelWeight: 0.9,
21
- bruteForceWeight: 0.7,
22
- timeAnomalyWeight: 0.15,
23
- };
24
- /**
25
- * Analyze authentication request for anomalies
26
- */
27
- async detectAnomalies(request) {
28
- const scores = {};
29
- const reasons = [];
30
- // Check IP reputation
31
- scores.ip = await this.checkIPReputation(request.ip);
32
- if (scores.ip > 0.5) {
33
- reasons.push(`Suspicious IP: ${request.ip}`);
34
- }
35
- // Check geolocation anomaly
36
- if (request.userId) {
37
- scores.geo = await this.checkGeoAnomaly(request);
38
- if (scores.geo > 0.5) {
39
- reasons.push('Unusual location detected');
40
- }
41
- // Check device fingerprint
42
- scores.device = await this.checkDeviceAnomaly(request);
43
- if (scores.device > 0.3) {
44
- reasons.push('New or unknown device');
45
- }
46
- // Check time-based anomaly
47
- scores.time = await this.checkTimeAnomaly(request);
48
- if (scores.time > 0.3) {
49
- reasons.push('Unusual login time');
50
- }
51
- // Check velocity (rate of requests)
52
- scores.velocity = await this.checkVelocity(request);
53
- if (scores.velocity > 0.5) {
54
- reasons.push('High request rate detected');
55
- }
56
- // Check behavioral patterns
57
- scores.pattern = await this.checkBehavioralPattern(request);
58
- if (scores.pattern > 0.4) {
59
- reasons.push('Unusual behavior pattern');
60
- }
61
- }
62
- else {
63
- // For non-authenticated requests
64
- scores.geo = 0;
65
- scores.device = 0;
66
- scores.time = 0;
67
- scores.velocity = await this.checkVelocity(request);
68
- scores.pattern = 0;
69
- }
70
- // Calculate composite score
71
- const weights = [1, 1, 0.8, 0.5, 1.2, 0.9]; // Adjust weights for each factor
72
- const weightedScores = Object.values(scores).map((s, i) => s * (weights[i] || 1));
73
- const composite = weightedScores.reduce((a, b) => a + b, 0) / weights.reduce((a, b) => a + b, 0);
74
- // Determine action based on composite score
75
- const action = this.determineAction(composite, request);
76
- // Update user profile if authenticated
77
- if (request.userId && request.success) {
78
- await this.updateUserProfile(request);
79
- }
80
- // Log anomaly if detected
81
- if (composite > 0.3) {
82
- logger.warn(`Anomaly detected for ${request.userId || 'anonymous'}: score=${composite.toFixed(2)}, action=${action}`);
83
- await this.logAnomaly(request, composite, reasons);
84
- }
85
- return {
86
- composite: Math.min(1, composite),
87
- details: scores,
88
- action,
89
- reasons,
90
- };
91
- }
92
- /**
93
- * Check IP reputation
94
- */
95
- async checkIPReputation(ip) {
96
- // Check cached reputation
97
- const cached = this.ipReputation.get(ip);
98
- if (cached !== undefined) {
99
- return cached;
100
- }
101
- let score = 0;
102
- // Check if IP is in threat lists
103
- const threats = await this.queryThreatIntelligence(ip);
104
- if (threats.tor) {
105
- score = Math.max(score, this.riskFactors.torWeight);
106
- }
107
- if (threats.vpn) {
108
- score = Math.max(score, this.riskFactors.vpnWeight);
109
- }
110
- if (threats.proxy) {
111
- score = Math.max(score, this.riskFactors.proxyWeight);
112
- }
113
- if (threats.botnet) {
114
- score = Math.max(score, 0.95);
115
- }
116
- if (threats.spam) {
117
- score = Math.max(score, 0.6);
118
- }
119
- // Cache the result
120
- this.ipReputation.set(ip, score);
121
- // Clean old cache entries periodically
122
- if (this.ipReputation.size > 10000) {
123
- const toDelete = Array.from(this.ipReputation.keys()).slice(0, 5000);
124
- toDelete.forEach(key => this.ipReputation.delete(key));
125
- }
126
- return score;
127
- }
128
- /**
129
- * Check geolocation anomaly
130
- */
131
- async checkGeoAnomaly(request) {
132
- const profile = this.getUserProfile(request.userId);
133
- if (!request.metadata?.country) {
134
- return 0; // No geo data available
135
- }
136
- const location = `${request.metadata.country}:${request.metadata.city || 'unknown'}`;
137
- // Check if location is known
138
- if (profile.knownLocations.has(location)) {
139
- return 0;
140
- }
141
- // Check for impossible travel
142
- if (profile.lastLoginLocation && request.metadata) {
143
- const timeDiff = request.timestamp.getTime() - profile.lastLoginLocation.timestamp.getTime();
144
- const distance = this.calculateDistance(profile.lastLoginLocation.lat, profile.lastLoginLocation.lon, 0, // Would need actual coordinates
145
- 0);
146
- const speed = (distance / timeDiff) * 3600000; // km/h
147
- if (speed > this.IMPOSSIBLE_TRAVEL_SPEED) {
148
- logger.warn(`Impossible travel detected: ${speed.toFixed(0)} km/h`);
149
- return this.riskFactors.impossibleTravelWeight;
150
- }
151
- }
152
- // New location
153
- return this.riskFactors.newLocationWeight;
154
- }
155
- /**
156
- * Check device anomaly
157
- */
158
- async checkDeviceAnomaly(request) {
159
- if (!request.fingerprint) {
160
- return 0.1; // Slightly suspicious if no fingerprint
161
- }
162
- const profile = this.getUserProfile(request.userId);
163
- if (profile.knownDevices.has(request.fingerprint)) {
164
- return 0;
165
- }
166
- // New device
167
- return this.riskFactors.newDeviceWeight;
168
- }
169
- /**
170
- * Check time-based anomaly
171
- */
172
- async checkTimeAnomaly(request) {
173
- const profile = this.getUserProfile(request.userId);
174
- const hour = request.timestamp.getHours();
175
- if (profile.loginTimes.length < 10) {
176
- return 0; // Not enough data
177
- }
178
- // Calculate average login time
179
- const avgHour = profile.loginTimes.reduce((a, b) => a + b, 0) / profile.loginTimes.length;
180
- const deviation = Math.abs(hour - avgHour);
181
- // If login is more than 6 hours from average
182
- if (deviation > 6) {
183
- return this.riskFactors.timeAnomalyWeight;
184
- }
185
- return 0;
186
- }
187
- /**
188
- * Check request velocity
189
- */
190
- async checkVelocity(request) {
191
- const db = getDb();
192
- const oneMinuteAgo = new Date(Date.now() - 60000);
193
- // Count recent requests from this IP
194
- const recentRequests = await this.countRecentRequests(request.ip, oneMinuteAgo);
195
- if (recentRequests > 10) {
196
- return 0.8; // Very high rate
197
- }
198
- if (recentRequests > 5) {
199
- return 0.5; // High rate
200
- }
201
- if (recentRequests > 3) {
202
- return 0.2; // Moderate rate
203
- }
204
- return 0;
205
- }
206
- /**
207
- * Check behavioral patterns
208
- */
209
- async checkBehavioralPattern(request) {
210
- const profile = this.getUserProfile(request.userId);
211
- // Check failed attempts (brute force)
212
- if (!request.success) {
213
- profile.failedAttempts++;
214
- profile.lastFailedAttempt = request.timestamp;
215
- if (profile.failedAttempts >= this.MAX_FAILED_ATTEMPTS) {
216
- return this.riskFactors.bruteForceWeight;
217
- }
218
- return profile.failedAttempts * 0.15; // Incremental risk
219
- }
220
- // Reset failed attempts on success
221
- if (request.success) {
222
- profile.failedAttempts = 0;
223
- }
224
- // Check for automated behavior patterns
225
- const entropy = this.calculateRequestEntropy(request);
226
- if (entropy < 0.3) {
227
- return 0.4; // Low entropy suggests automation
228
- }
229
- return 0;
230
- }
231
- /**
232
- * Determine action based on score and context
233
- */
234
- determineAction(score, request) {
235
- // Always deny if score is very high
236
- if (score > 0.8) {
237
- return 'deny';
238
- }
239
- // Challenge for moderate scores
240
- if (score > 0.4) {
241
- return 'challenge';
242
- }
243
- // Consider user history
244
- if (request.userId) {
245
- const profile = this.getUserProfile(request.userId);
246
- // Be more strict for users with high risk scores
247
- if (profile.riskScore > 0.5 && score > 0.3) {
248
- return 'challenge';
249
- }
250
- }
251
- return 'allow';
252
- }
253
- /**
254
- * Query threat intelligence feeds
255
- */
256
- async queryThreatIntelligence(ip) {
257
- // In production, this would query actual threat feeds
258
- // For now, use some heuristics
259
- // Check if IP is in private ranges (likely VPN/proxy)
260
- const isPrivate = this.isPrivateIP(ip);
261
- // Simulate threat detection
262
- const ipNum = ip.split('.').reduce((acc, octet) => acc * 256 + parseInt(octet), 0);
263
- const hash = createHash('sha256').update(ip).digest();
264
- const simulated = hash[0] / 255;
265
- return {
266
- tor: simulated > 0.95,
267
- vpn: isPrivate || simulated > 0.7,
268
- proxy: simulated > 0.8,
269
- botnet: simulated > 0.98,
270
- spam: simulated > 0.85,
271
- };
272
- }
273
- /**
274
- * Check if IP is in private range
275
- */
276
- isPrivateIP(ip) {
277
- const parts = ip.split('.').map(p => parseInt(p));
278
- return (parts[0] === 10 || // 10.0.0.0/8
279
- (parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31) || // 172.16.0.0/12
280
- (parts[0] === 192 && parts[1] === 168) || // 192.168.0.0/16
281
- parts[0] === 127 // 127.0.0.0/8 (loopback)
282
- );
283
- }
284
- /**
285
- * Calculate distance between two coordinates (Haversine formula)
286
- */
287
- calculateDistance(lat1, lon1, lat2, lon2) {
288
- const R = 6371; // Earth radius in km
289
- const dLat = this.toRad(lat2 - lat1);
290
- const dLon = this.toRad(lon2 - lon1);
291
- const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
292
- Math.cos(this.toRad(lat1)) * Math.cos(this.toRad(lat2)) *
293
- Math.sin(dLon / 2) * Math.sin(dLon / 2);
294
- const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
295
- return R * c;
296
- }
297
- toRad(deg) {
298
- return deg * (Math.PI / 180);
299
- }
300
- /**
301
- * Calculate request entropy (randomness)
302
- */
303
- calculateRequestEntropy(request) {
304
- const data = JSON.stringify(request);
305
- const freq = {};
306
- for (const char of data) {
307
- freq[char] = (freq[char] || 0) + 1;
308
- }
309
- let entropy = 0;
310
- const len = data.length;
311
- for (const count of Object.values(freq)) {
312
- const p = count / len;
313
- entropy -= p * Math.log2(p);
314
- }
315
- return entropy / 8; // Normalize
316
- }
317
- /**
318
- * Get or create user profile
319
- */
320
- getUserProfile(userId) {
321
- let profile = this.userProfiles.get(userId);
322
- if (!profile) {
323
- profile = {
324
- userId,
325
- knownIps: new Set(),
326
- knownDevices: new Set(),
327
- knownLocations: new Set(),
328
- loginTimes: [],
329
- averageSessionDuration: 0,
330
- failedAttempts: 0,
331
- riskScore: 0,
332
- };
333
- this.userProfiles.set(userId, profile);
334
- }
335
- return profile;
336
- }
337
- /**
338
- * Update user profile with successful authentication
339
- */
340
- async updateUserProfile(request) {
341
- if (!request.userId)
342
- return;
343
- const profile = this.getUserProfile(request.userId);
344
- // Update known attributes
345
- profile.knownIps.add(request.ip);
346
- if (request.fingerprint) {
347
- profile.knownDevices.add(request.fingerprint);
348
- }
349
- if (request.metadata?.country) {
350
- const location = `${request.metadata.country}:${request.metadata.city || 'unknown'}`;
351
- profile.knownLocations.add(location);
352
- }
353
- // Update login times
354
- profile.loginTimes.push(request.timestamp.getHours());
355
- if (profile.loginTimes.length > 100) {
356
- profile.loginTimes.shift(); // Keep last 100
357
- }
358
- // Update risk score (decay over time)
359
- profile.riskScore = Math.max(0, profile.riskScore * 0.95);
360
- }
361
- /**
362
- * Count recent requests from IP
363
- */
364
- async countRecentRequests(ip, since) {
365
- // In production, this would query the database
366
- // For now, return a simulated count
367
- return Math.floor(Math.random() * 3);
368
- }
369
- /**
370
- * Log anomaly to database
371
- */
372
- async logAnomaly(request, score, reasons) {
373
- // TODO: Log to audit database
374
- logger.info(`Anomaly logged: user=${request.userId}, score=${score}, reasons=${reasons.join(', ')}`);
375
- }
376
- /**
377
- * Get risk score for a user
378
- */
379
- async getUserRiskScore(userId) {
380
- const profile = this.userProfiles.get(userId);
381
- return profile?.riskScore || 0;
382
- }
383
- /**
384
- * Reset user profile (after password reset, etc.)
385
- */
386
- resetUserProfile(userId) {
387
- this.userProfiles.delete(userId);
388
- logger.info(`Reset profile for user ${userId}`);
389
- }
390
- /**
391
- * Get statistics
392
- */
393
- getStats() {
394
- const highRiskUsers = Array.from(this.userProfiles.values())
395
- .filter(p => p.riskScore > 0.5).length;
396
- return {
397
- totalProfiles: this.userProfiles.size,
398
- totalIPs: this.ipReputation.size,
399
- highRiskUsers,
400
- };
401
- }
402
- }
403
- // Export singleton instance
404
- export const anomalyDetector = new AnomalyDetector();
405
- //# sourceMappingURL=anomalyDetection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"anomalyDetection.js","sourceRoot":"","sources":["../../../src/server/oauth/anomalyDetection.ts"],"names":[],"mappings":"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"}
@@ -1,61 +0,0 @@
1
- interface TokenPayload {
2
- sub: string;
3
- client_id: string;
4
- scope: string;
5
- iat?: number;
6
- exp?: number;
7
- }
8
- export declare class OAuthServer {
9
- private readonly jwtSecret;
10
- private readonly jwtExpiresIn;
11
- constructor();
12
- /**
13
- * Validate client credentials
14
- */
15
- validateClient(clientId: string, clientSecret?: string): Promise<boolean>;
16
- /**
17
- * Generate authorization code for OAuth flow
18
- */
19
- generateAuthCode(clientId: string, userId: string, redirectUri: string, scope?: string): Promise<string>;
20
- /**
21
- * Exchange authorization code for access token
22
- */
23
- exchangeCodeForToken(code: string, clientId: string, clientSecret: string, redirectUri: string): Promise<{
24
- access_token: string;
25
- refresh_token?: string;
26
- token_type: string;
27
- expires_in: number;
28
- scope: string;
29
- }>;
30
- /**
31
- * Generate access token (JWT)
32
- */
33
- private generateAccessToken;
34
- /**
35
- * Generate refresh token
36
- */
37
- private generateRefreshToken;
38
- /**
39
- * Validate access token
40
- */
41
- validateAccessToken(token: string): Promise<TokenPayload | null>;
42
- /**
43
- * Refresh access token using refresh token
44
- */
45
- refreshAccessToken(refreshToken: string): Promise<{
46
- access_token: string;
47
- token_type: string;
48
- expires_in: number;
49
- }>;
50
- /**
51
- * Revoke token
52
- */
53
- revokeToken(token: string): Promise<void>;
54
- /**
55
- * Create or get user from external ID
56
- */
57
- getOrCreateUser(externalId: string): Promise<string>;
58
- }
59
- export declare const oauthServer: OAuthServer;
60
- export {};
61
- //# sourceMappingURL=authServer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"authServer.d.ts","sourceRoot":"","sources":["../../../src/server/oauth/authServer.ts"],"names":[],"mappings":"AAYA,UAAU,YAAY;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;;IAWtC;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA+B/E;;OAEG;IACG,gBAAgB,CACpB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,KAAK,GAAE,MAAqB,GAC3B,OAAO,CAAC,MAAM,CAAC;IAwBlB;;OAEG;IACG,oBAAoB,CACxB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QACT,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IAuFF;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;OAEG;IACG,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAwBtE;;OAEG;IACG,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;QACtD,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IAkDF;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe/C;;OAEG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAkC3D;AAGD,eAAO,MAAM,WAAW,aAAoB,CAAC"}