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.
Files changed (282) hide show
  1. package/README.md +24 -11
  2. package/dist/developer/analyzers/bloat-detector.d.ts +89 -0
  3. package/dist/developer/analyzers/bloat-detector.d.ts.map +1 -0
  4. package/dist/developer/analyzers/bloat-detector.js +483 -0
  5. package/dist/developer/analyzers/bloat-detector.js.map +1 -0
  6. package/dist/developer/backup/auto-backup.d.ts +96 -0
  7. package/dist/developer/backup/auto-backup.d.ts.map +1 -0
  8. package/dist/developer/backup/auto-backup.js +346 -0
  9. package/dist/developer/backup/auto-backup.js.map +1 -0
  10. package/dist/developer/blockers/package-blocker.d.ts +33 -0
  11. package/dist/developer/blockers/package-blocker.d.ts.map +1 -0
  12. package/dist/developer/blockers/package-blocker.js +224 -0
  13. package/dist/developer/blockers/package-blocker.js.map +1 -0
  14. package/dist/developer/evaluators/ai-error-preventer.d.ts +54 -0
  15. package/dist/developer/evaluators/ai-error-preventer.d.ts.map +1 -0
  16. package/dist/developer/evaluators/ai-error-preventer.js +270 -0
  17. package/dist/developer/evaluators/ai-error-preventer.js.map +1 -0
  18. package/dist/developer/evaluators/build-context-detector.d.ts +44 -0
  19. package/dist/developer/evaluators/build-context-detector.d.ts.map +1 -0
  20. package/dist/developer/evaluators/build-context-detector.js +258 -0
  21. package/dist/developer/evaluators/build-context-detector.js.map +1 -0
  22. package/dist/developer/evaluators/package-evaluator.d.ts +37 -0
  23. package/dist/developer/evaluators/package-evaluator.d.ts.map +1 -0
  24. package/dist/developer/evaluators/package-evaluator.js +278 -0
  25. package/dist/developer/evaluators/package-evaluator.js.map +1 -0
  26. package/dist/developer/guards/file-guardian.d.ts +79 -0
  27. package/dist/developer/guards/file-guardian.d.ts.map +1 -0
  28. package/dist/developer/guards/file-guardian.js +309 -0
  29. package/dist/developer/guards/file-guardian.js.map +1 -0
  30. package/dist/developer/managers/context-manager.d.ts +61 -0
  31. package/dist/developer/managers/context-manager.d.ts.map +1 -0
  32. package/dist/developer/managers/context-manager.js +302 -0
  33. package/dist/developer/managers/context-manager.js.map +1 -0
  34. package/dist/developer/metrics/complexity-calculator.d.ts +52 -0
  35. package/dist/developer/metrics/complexity-calculator.d.ts.map +1 -0
  36. package/dist/developer/metrics/complexity-calculator.js +259 -0
  37. package/dist/developer/metrics/complexity-calculator.js.map +1 -0
  38. package/dist/developer/reports/review-summary.d.ts +49 -0
  39. package/dist/developer/reports/review-summary.d.ts.map +1 -0
  40. package/dist/developer/reports/review-summary.js +249 -0
  41. package/dist/developer/reports/review-summary.js.map +1 -0
  42. package/dist/developer/scanners/review-assistant.d.ts +41 -0
  43. package/dist/developer/scanners/review-assistant.d.ts.map +1 -0
  44. package/dist/developer/scanners/review-assistant.js +374 -0
  45. package/dist/developer/scanners/review-assistant.js.map +1 -0
  46. package/dist/developer/scanners/secret-scanner.d.ts +66 -0
  47. package/dist/developer/scanners/secret-scanner.d.ts.map +1 -0
  48. package/dist/developer/scanners/secret-scanner.js +287 -0
  49. package/dist/developer/scanners/secret-scanner.js.map +1 -0
  50. package/dist/developer/scanners/sql-injection-detector.d.ts +54 -0
  51. package/dist/developer/scanners/sql-injection-detector.d.ts.map +1 -0
  52. package/dist/developer/scanners/sql-injection-detector.js +174 -0
  53. package/dist/developer/scanners/sql-injection-detector.js.map +1 -0
  54. package/dist/developer/scanners/xss-detector.d.ts +60 -0
  55. package/dist/developer/scanners/xss-detector.d.ts.map +1 -0
  56. package/dist/developer/scanners/xss-detector.js +229 -0
  57. package/dist/developer/scanners/xss-detector.js.map +1 -0
  58. package/dist/developer/types/ai-errors.d.ts +34 -0
  59. package/dist/developer/types/ai-errors.d.ts.map +1 -0
  60. package/dist/developer/types/ai-errors.js +271 -0
  61. package/dist/developer/types/ai-errors.js.map +1 -0
  62. package/dist/developer/types/package.d.ts +32 -0
  63. package/dist/developer/types/package.d.ts.map +1 -0
  64. package/dist/developer/types/package.js +5 -0
  65. package/dist/developer/types/package.js.map +1 -0
  66. package/dist/developer/updaters/dependency-updater.d.ts +102 -0
  67. package/dist/developer/updaters/dependency-updater.d.ts.map +1 -0
  68. package/dist/developer/updaters/dependency-updater.js +472 -0
  69. package/dist/developer/updaters/dependency-updater.js.map +1 -0
  70. package/dist/developer/validators/cargo.d.ts +14 -0
  71. package/dist/developer/validators/cargo.d.ts.map +1 -0
  72. package/dist/developer/validators/cargo.js +132 -0
  73. package/dist/developer/validators/cargo.js.map +1 -0
  74. package/dist/developer/validators/gem.d.ts +14 -0
  75. package/dist/developer/validators/gem.d.ts.map +1 -0
  76. package/dist/developer/validators/gem.js +85 -0
  77. package/dist/developer/validators/gem.js.map +1 -0
  78. package/dist/developer/validators/go.d.ts +14 -0
  79. package/dist/developer/validators/go.d.ts.map +1 -0
  80. package/dist/developer/validators/go.js +138 -0
  81. package/dist/developer/validators/go.js.map +1 -0
  82. package/dist/developer/validators/maven.d.ts +14 -0
  83. package/dist/developer/validators/maven.d.ts.map +1 -0
  84. package/dist/developer/validators/maven.js +99 -0
  85. package/dist/developer/validators/maven.js.map +1 -0
  86. package/dist/developer/validators/npm.d.ts +14 -0
  87. package/dist/developer/validators/npm.d.ts.map +1 -0
  88. package/dist/developer/validators/npm.js +96 -0
  89. package/dist/developer/validators/npm.js.map +1 -0
  90. package/dist/developer/validators/nuget.d.ts +15 -0
  91. package/dist/developer/validators/nuget.d.ts.map +1 -0
  92. package/dist/developer/validators/nuget.js +107 -0
  93. package/dist/developer/validators/nuget.js.map +1 -0
  94. package/dist/developer/validators/pypi.d.ts +14 -0
  95. package/dist/developer/validators/pypi.d.ts.map +1 -0
  96. package/dist/developer/validators/pypi.js +118 -0
  97. package/dist/developer/validators/pypi.js.map +1 -0
  98. package/dist/developer/validators/registry-manager.d.ts +37 -0
  99. package/dist/developer/validators/registry-manager.d.ts.map +1 -0
  100. package/dist/developer/validators/registry-manager.js +89 -0
  101. package/dist/developer/validators/registry-manager.js.map +1 -0
  102. package/dist/developer/validators/version-checker.d.ts +145 -0
  103. package/dist/developer/validators/version-checker.d.ts.map +1 -0
  104. package/dist/developer/validators/version-checker.js +529 -0
  105. package/dist/developer/validators/version-checker.js.map +1 -0
  106. package/dist/server/index.js.map +1 -1
  107. package/dist/server/middleware/auth.d.ts +7 -9
  108. package/dist/server/middleware/auth.d.ts.map +1 -1
  109. package/dist/server/middleware/auth.js.map +1 -1
  110. package/dist/tools/check-versions.d.ts +100 -0
  111. package/dist/tools/check-versions.d.ts.map +1 -0
  112. package/dist/tools/check-versions.js +328 -0
  113. package/dist/tools/check-versions.js.map +1 -0
  114. package/dist/tools/detect-code-smell.d.ts +9 -0
  115. package/dist/tools/detect-code-smell.d.ts.map +1 -0
  116. package/dist/tools/detect-code-smell.js +231 -0
  117. package/dist/tools/detect-code-smell.js.map +1 -0
  118. package/dist/tools/index.d.ts +471 -0
  119. package/dist/tools/index.d.ts.map +1 -1
  120. package/dist/tools/index.js +178 -0
  121. package/dist/tools/index.js.map +1 -1
  122. package/dist/tools/journey.js +1 -1
  123. package/dist/tools/journey.js.map +1 -1
  124. package/dist/tools/pre-review-code.d.ts +71 -0
  125. package/dist/tools/pre-review-code.d.ts.map +1 -0
  126. package/dist/tools/pre-review-code.js +159 -0
  127. package/dist/tools/pre-review-code.js.map +1 -0
  128. package/dist/tools/preserve-context.d.ts +27 -0
  129. package/dist/tools/preserve-context.d.ts.map +1 -0
  130. package/dist/tools/preserve-context.js +98 -0
  131. package/dist/tools/preserve-context.js.map +1 -0
  132. package/dist/tools/protect-files.d.ts +224 -0
  133. package/dist/tools/protect-files.d.ts.map +1 -0
  134. package/dist/tools/protect-files.js +286 -0
  135. package/dist/tools/protect-files.js.map +1 -0
  136. package/dist/tools/scan-security.d.ts +38 -0
  137. package/dist/tools/scan-security.d.ts.map +1 -0
  138. package/dist/tools/scan-security.js +237 -0
  139. package/dist/tools/scan-security.js.map +1 -0
  140. package/dist/tools/validate_packages.d.ts +8 -0
  141. package/dist/tools/validate_packages.d.ts.map +1 -0
  142. package/dist/tools/validate_packages.js +159 -0
  143. package/dist/tools/validate_packages.js.map +1 -0
  144. package/dist/types/auth.d.ts.map +1 -1
  145. package/dist/types/auth.js +1 -2
  146. package/dist/types/auth.js.map +1 -1
  147. package/dist/types/context.d.ts +46 -0
  148. package/dist/types/context.d.ts.map +1 -0
  149. package/dist/types/context.js +17 -0
  150. package/dist/types/context.js.map +1 -0
  151. package/dist/types/file-protection.d.ts +50 -0
  152. package/dist/types/file-protection.d.ts.map +1 -0
  153. package/dist/types/file-protection.js +9 -0
  154. package/dist/types/file-protection.js.map +1 -0
  155. package/dist/utils/errorHandler.d.ts.map +1 -1
  156. package/dist/utils/errorHandler.js +2 -1
  157. package/dist/utils/errorHandler.js.map +1 -1
  158. package/package.json +30 -4
  159. package/dist/db/migrate.d.ts +0 -4
  160. package/dist/db/migrate.d.ts.map +0 -1
  161. package/dist/db/migrate.js +0 -34
  162. package/dist/db/migrate.js.map +0 -1
  163. package/dist/db/migrations/schema.d.ts +0 -1074
  164. package/dist/db/migrations/schema.d.ts.map +0 -1
  165. package/dist/db/migrations/schema.js +0 -160
  166. package/dist/db/migrations/schema.js.map +0 -1
  167. package/dist/db/schema.d.ts +0 -1576
  168. package/dist/db/schema.d.ts.map +0 -1
  169. package/dist/db/schema.js +0 -204
  170. package/dist/db/schema.js.map +0 -1
  171. package/dist/db/seed.d.ts +0 -4
  172. package/dist/db/seed.d.ts.map +0 -1
  173. package/dist/db/seed.js +0 -57
  174. package/dist/db/seed.js.map +0 -1
  175. package/dist/db/seedOAuth.d.ts +0 -4
  176. package/dist/db/seedOAuth.d.ts.map +0 -1
  177. package/dist/db/seedOAuth.js +0 -76
  178. package/dist/db/seedOAuth.js.map +0 -1
  179. package/dist/governance/config.d.ts +0 -66
  180. package/dist/governance/config.d.ts.map +0 -1
  181. package/dist/governance/config.js +0 -238
  182. package/dist/governance/config.js.map +0 -1
  183. package/dist/governance/detectors/hallucination.d.ts +0 -61
  184. package/dist/governance/detectors/hallucination.d.ts.map +0 -1
  185. package/dist/governance/detectors/hallucination.js +0 -338
  186. package/dist/governance/detectors/hallucination.js.map +0 -1
  187. package/dist/governance/detectors/inconsistency.d.ts +0 -99
  188. package/dist/governance/detectors/inconsistency.d.ts.map +0 -1
  189. package/dist/governance/detectors/inconsistency.js +0 -548
  190. package/dist/governance/detectors/inconsistency.js.map +0 -1
  191. package/dist/governance/detectors/toneDrift.d.ts +0 -63
  192. package/dist/governance/detectors/toneDrift.d.ts.map +0 -1
  193. package/dist/governance/detectors/toneDrift.js +0 -421
  194. package/dist/governance/detectors/toneDrift.js.map +0 -1
  195. package/dist/governance/detectors/unsafeReasoning.d.ts +0 -54
  196. package/dist/governance/detectors/unsafeReasoning.d.ts.map +0 -1
  197. package/dist/governance/detectors/unsafeReasoning.js +0 -473
  198. package/dist/governance/detectors/unsafeReasoning.js.map +0 -1
  199. package/dist/governance/evaluationEngine.d.ts +0 -112
  200. package/dist/governance/evaluationEngine.d.ts.map +0 -1
  201. package/dist/governance/evaluationEngine.js +0 -265
  202. package/dist/governance/evaluationEngine.js.map +0 -1
  203. package/dist/governance/intervention.d.ts +0 -81
  204. package/dist/governance/intervention.d.ts.map +0 -1
  205. package/dist/governance/intervention.js +0 -405
  206. package/dist/governance/intervention.js.map +0 -1
  207. package/dist/server/oauth/anomalyDetection.d.ts +0 -146
  208. package/dist/server/oauth/anomalyDetection.d.ts.map +0 -1
  209. package/dist/server/oauth/anomalyDetection.js +0 -405
  210. package/dist/server/oauth/anomalyDetection.js.map +0 -1
  211. package/dist/server/oauth/authServer.d.ts +0 -61
  212. package/dist/server/oauth/authServer.d.ts.map +0 -1
  213. package/dist/server/oauth/authServer.js +0 -283
  214. package/dist/server/oauth/authServer.js.map +0 -1
  215. package/dist/server/oauth/dpop.d.ts +0 -135
  216. package/dist/server/oauth/dpop.d.ts.map +0 -1
  217. package/dist/server/oauth/dpop.js +0 -338
  218. package/dist/server/oauth/dpop.js.map +0 -1
  219. package/dist/server/oauth/gdpr/consent.d.ts +0 -173
  220. package/dist/server/oauth/gdpr/consent.d.ts.map +0 -1
  221. package/dist/server/oauth/gdpr/consent.js +0 -388
  222. package/dist/server/oauth/gdpr/consent.js.map +0 -1
  223. package/dist/server/oauth/gdpr/dataPortability.d.ts +0 -214
  224. package/dist/server/oauth/gdpr/dataPortability.d.ts.map +0 -1
  225. package/dist/server/oauth/gdpr/dataPortability.js +0 -486
  226. package/dist/server/oauth/gdpr/dataPortability.js.map +0 -1
  227. package/dist/server/oauth/gdpr/index.d.ts +0 -103
  228. package/dist/server/oauth/gdpr/index.d.ts.map +0 -1
  229. package/dist/server/oauth/gdpr/index.js +0 -273
  230. package/dist/server/oauth/gdpr/index.js.map +0 -1
  231. package/dist/server/oauth/gdpr/rightToErasure.d.ts +0 -184
  232. package/dist/server/oauth/gdpr/rightToErasure.d.ts.map +0 -1
  233. package/dist/server/oauth/gdpr/rightToErasure.js +0 -527
  234. package/dist/server/oauth/gdpr/rightToErasure.js.map +0 -1
  235. package/dist/server/oauth/monitoring/securityMonitor.d.ts +0 -218
  236. package/dist/server/oauth/monitoring/securityMonitor.d.ts.map +0 -1
  237. package/dist/server/oauth/monitoring/securityMonitor.js +0 -615
  238. package/dist/server/oauth/monitoring/securityMonitor.js.map +0 -1
  239. package/dist/server/oauth/pkce.d.ts +0 -61
  240. package/dist/server/oauth/pkce.d.ts.map +0 -1
  241. package/dist/server/oauth/pkce.js +0 -157
  242. package/dist/server/oauth/pkce.js.map +0 -1
  243. package/dist/server/oauth/providers/base.d.ts +0 -147
  244. package/dist/server/oauth/providers/base.d.ts.map +0 -1
  245. package/dist/server/oauth/providers/base.js +0 -312
  246. package/dist/server/oauth/providers/base.js.map +0 -1
  247. package/dist/server/oauth/providers/github.d.ts +0 -55
  248. package/dist/server/oauth/providers/github.d.ts.map +0 -1
  249. package/dist/server/oauth/providers/github.js +0 -225
  250. package/dist/server/oauth/providers/github.js.map +0 -1
  251. package/dist/server/oauth/providers/google.d.ts +0 -49
  252. package/dist/server/oauth/providers/google.d.ts.map +0 -1
  253. package/dist/server/oauth/providers/google.js +0 -153
  254. package/dist/server/oauth/providers/google.js.map +0 -1
  255. package/dist/server/oauth/providers/index.d.ts +0 -9
  256. package/dist/server/oauth/providers/index.d.ts.map +0 -1
  257. package/dist/server/oauth/providers/index.js +0 -24
  258. package/dist/server/oauth/providers/index.js.map +0 -1
  259. package/dist/server/oauth/refreshTokenRotation.d.ts +0 -114
  260. package/dist/server/oauth/refreshTokenRotation.d.ts.map +0 -1
  261. package/dist/server/oauth/refreshTokenRotation.js +0 -344
  262. package/dist/server/oauth/refreshTokenRotation.js.map +0 -1
  263. package/dist/server/oauth/security.d.ts +0 -101
  264. package/dist/server/oauth/security.d.ts.map +0 -1
  265. package/dist/server/oauth/security.js +0 -268
  266. package/dist/server/oauth/security.js.map +0 -1
  267. package/dist/server/oauth/tokenEncryption.d.ts +0 -80
  268. package/dist/server/oauth/tokenEncryption.d.ts.map +0 -1
  269. package/dist/server/oauth/tokenEncryption.js +0 -218
  270. package/dist/server/oauth/tokenEncryption.js.map +0 -1
  271. package/dist/tools/sendMessage-complex-backup.d.ts +0 -6
  272. package/dist/tools/sendMessage-complex-backup.d.ts.map +0 -1
  273. package/dist/tools/sendMessage-complex-backup.js +0 -545
  274. package/dist/tools/sendMessage-complex-backup.js.map +0 -1
  275. package/dist/tools/sendMessage-revised.d.ts +0 -11
  276. package/dist/tools/sendMessage-revised.d.ts.map +0 -1
  277. package/dist/tools/sendMessage-revised.js +0 -429
  278. package/dist/tools/sendMessage-revised.js.map +0 -1
  279. package/dist/tools/sendMessage-truly-simple.d.ts +0 -8
  280. package/dist/tools/sendMessage-truly-simple.d.ts.map +0 -1
  281. package/dist/tools/sendMessage-truly-simple.js +0 -299
  282. package/dist/tools/sendMessage-truly-simple.js.map +0 -1
@@ -1,312 +0,0 @@
1
- import { jwtVerify, importJWK } from 'jose';
2
- import { logger } from '../../../utils/logger.js';
3
- import { oauthSecurity } from '../security.js';
4
- /**
5
- * Abstract base class for OAuth providers
6
- * Implements common OAuth 2.0/OIDC functionality
7
- */
8
- export class OAuthProvider {
9
- config;
10
- jwksCache = null;
11
- JWKS_CACHE_TTL = 3600000; // 1 hour
12
- constructor(config) {
13
- this.config = config;
14
- }
15
- /**
16
- * Build authorization URL with required parameters
17
- */
18
- buildAuthorizationUrl(params) {
19
- const url = new URL(this.authorizationUrl);
20
- // Required OAuth parameters
21
- url.searchParams.set('response_type', 'code');
22
- url.searchParams.set('client_id', this.config.clientId);
23
- url.searchParams.set('redirect_uri', this.config.redirectUri);
24
- url.searchParams.set('state', params.state);
25
- // Scope
26
- const scope = params.scope || this.getDefaultScopes().join(' ');
27
- url.searchParams.set('scope', scope);
28
- // PKCE parameters
29
- if (params.codeChallenge) {
30
- url.searchParams.set('code_challenge', params.codeChallenge);
31
- url.searchParams.set('code_challenge_method', params.codeChallengeMethod || 'S256');
32
- }
33
- // OpenID Connect nonce
34
- if (params.nonce) {
35
- url.searchParams.set('nonce', params.nonce);
36
- }
37
- // Provider-specific additional parameters
38
- if (this.config.additionalParams) {
39
- Object.entries(this.config.additionalParams).forEach(([key, value]) => {
40
- url.searchParams.set(key, value);
41
- });
42
- }
43
- // Additional parameters from request
44
- if (params.additionalParams) {
45
- Object.entries(params.additionalParams).forEach(([key, value]) => {
46
- url.searchParams.set(key, value);
47
- });
48
- }
49
- logger.debug(`Built authorization URL for ${this.name}: ${url.toString()}`);
50
- return url.toString();
51
- }
52
- /**
53
- * Exchange authorization code for tokens
54
- */
55
- async exchangeCode(code, codeVerifier) {
56
- const params = new URLSearchParams({
57
- grant_type: 'authorization_code',
58
- code,
59
- client_id: this.config.clientId,
60
- client_secret: this.config.clientSecret,
61
- redirect_uri: this.config.redirectUri,
62
- });
63
- // Add PKCE verifier if provided
64
- if (codeVerifier) {
65
- params.set('code_verifier', codeVerifier);
66
- }
67
- try {
68
- const response = await fetch(this.tokenUrl, {
69
- method: 'POST',
70
- headers: {
71
- 'Content-Type': 'application/x-www-form-urlencoded',
72
- 'Accept': 'application/json',
73
- },
74
- body: params.toString(),
75
- });
76
- if (!response.ok) {
77
- const error = await response.text();
78
- logger.error(`Token exchange failed for ${this.name}: ${error}`);
79
- throw new Error(`Token exchange failed: ${response.status}`);
80
- }
81
- const tokens = await response.json();
82
- // Validate ID token if present (OIDC)
83
- if (tokens.id_token) {
84
- await this.validateIdToken(tokens.id_token);
85
- }
86
- logger.info(`Successfully exchanged code for tokens with ${this.name}`);
87
- return tokens;
88
- }
89
- catch (error) {
90
- logger.error(`Error exchanging code with ${this.name}:`, error);
91
- throw error;
92
- }
93
- }
94
- /**
95
- * Refresh access token
96
- */
97
- async refreshToken(refreshToken) {
98
- const params = new URLSearchParams({
99
- grant_type: 'refresh_token',
100
- refresh_token: refreshToken,
101
- client_id: this.config.clientId,
102
- client_secret: this.config.clientSecret,
103
- });
104
- try {
105
- const response = await fetch(this.tokenUrl, {
106
- method: 'POST',
107
- headers: {
108
- 'Content-Type': 'application/x-www-form-urlencoded',
109
- 'Accept': 'application/json',
110
- },
111
- body: params.toString(),
112
- });
113
- if (!response.ok) {
114
- const error = await response.text();
115
- logger.error(`Token refresh failed for ${this.name}: ${error}`);
116
- throw new Error(`Token refresh failed: ${response.status}`);
117
- }
118
- const tokens = await response.json();
119
- logger.info(`Successfully refreshed token with ${this.name}`);
120
- return tokens;
121
- }
122
- catch (error) {
123
- logger.error(`Error refreshing token with ${this.name}:`, error);
124
- throw error;
125
- }
126
- }
127
- /**
128
- * Get user information from provider
129
- */
130
- async getUserInfo(accessToken) {
131
- try {
132
- const response = await fetch(this.userInfoUrl, {
133
- headers: {
134
- 'Authorization': `Bearer ${accessToken}`,
135
- 'Accept': 'application/json',
136
- },
137
- });
138
- if (!response.ok) {
139
- const error = await response.text();
140
- logger.error(`Failed to get user info from ${this.name}: ${error}`);
141
- throw new Error(`Failed to get user info: ${response.status}`);
142
- }
143
- const data = await response.json();
144
- const userInfo = this.normalizeUserInfo(data);
145
- logger.info(`Retrieved user info from ${this.name} for user ${userInfo.id}`);
146
- return userInfo;
147
- }
148
- catch (error) {
149
- logger.error(`Error getting user info from ${this.name}:`, error);
150
- throw error;
151
- }
152
- }
153
- /**
154
- * Revoke token (if supported by provider)
155
- */
156
- async revokeToken(token, tokenType = 'access_token') {
157
- if (!this.revokeUrl) {
158
- logger.warn(`Token revocation not supported by ${this.name}`);
159
- return;
160
- }
161
- const params = new URLSearchParams({
162
- token,
163
- token_type_hint: tokenType,
164
- client_id: this.config.clientId,
165
- client_secret: this.config.clientSecret,
166
- });
167
- try {
168
- const response = await fetch(this.revokeUrl, {
169
- method: 'POST',
170
- headers: {
171
- 'Content-Type': 'application/x-www-form-urlencoded',
172
- },
173
- body: params.toString(),
174
- });
175
- if (!response.ok) {
176
- logger.warn(`Token revocation failed for ${this.name}: ${response.status}`);
177
- }
178
- else {
179
- logger.info(`Successfully revoked token with ${this.name}`);
180
- }
181
- }
182
- catch (error) {
183
- logger.error(`Error revoking token with ${this.name}:`, error);
184
- }
185
- }
186
- /**
187
- * Validate ID token (OpenID Connect)
188
- */
189
- async validateIdToken(idToken) {
190
- if (!this.jwksUrl) {
191
- throw new Error(`JWKS URL not configured for ${this.name}`);
192
- }
193
- try {
194
- // Get JWKS (with caching)
195
- const jwks = await this.getJWKS();
196
- // Parse token header to get kid
197
- const [header] = idToken.split('.');
198
- const decodedHeader = JSON.parse(Buffer.from(header, 'base64').toString());
199
- const kid = decodedHeader.kid;
200
- // Find matching key
201
- const key = jwks.keys.find(k => k.kid === kid);
202
- if (!key) {
203
- throw new Error('No matching key found in JWKS');
204
- }
205
- // Import and verify
206
- const publicKey = await importJWK(key);
207
- const { payload } = await jwtVerify(idToken, publicKey, {
208
- issuer: this.getExpectedIssuer(),
209
- audience: this.config.clientId,
210
- });
211
- const claims = payload;
212
- // Additional validations
213
- this.validateIdTokenClaims(claims);
214
- logger.debug(`ID token validated successfully for ${this.name}`);
215
- return claims;
216
- }
217
- catch (error) {
218
- logger.error(`ID token validation failed for ${this.name}:`, error);
219
- throw new Error('Invalid ID token');
220
- }
221
- }
222
- /**
223
- * Get JWKS from provider (with caching)
224
- */
225
- async getJWKS() {
226
- if (!this.jwksUrl) {
227
- throw new Error(`JWKS URL not configured for ${this.name}`);
228
- }
229
- // Check cache
230
- if (this.jwksCache &&
231
- Date.now() - this.jwksCache.cachedAt < this.JWKS_CACHE_TTL) {
232
- return { keys: this.jwksCache.keys };
233
- }
234
- try {
235
- const response = await fetch(this.jwksUrl);
236
- if (!response.ok) {
237
- throw new Error(`Failed to fetch JWKS: ${response.status}`);
238
- }
239
- const jwks = await response.json();
240
- // Cache the keys
241
- this.jwksCache = {
242
- keys: jwks.keys,
243
- cachedAt: Date.now(),
244
- };
245
- logger.debug(`Fetched and cached JWKS for ${this.name}`);
246
- return jwks;
247
- }
248
- catch (error) {
249
- logger.error(`Error fetching JWKS for ${this.name}:`, error);
250
- throw error;
251
- }
252
- }
253
- /**
254
- * Validate redirect URI
255
- */
256
- validateRedirectUri(uri) {
257
- return oauthSecurity.validateRedirectUri(uri, this.config.clientId);
258
- }
259
- /**
260
- * Additional ID token claims validation
261
- */
262
- validateIdTokenClaims(claims) {
263
- // Check expiration
264
- const now = Math.floor(Date.now() / 1000);
265
- if (claims.exp < now) {
266
- throw new Error('ID token expired');
267
- }
268
- // Check issued at (not in the future)
269
- if (claims.iat > now + 60) { // Allow 1 minute clock skew
270
- throw new Error('ID token issued in the future');
271
- }
272
- // Provider-specific additional validations can be added in subclasses
273
- }
274
- /**
275
- * Handle provider-specific errors
276
- */
277
- handleProviderError(error) {
278
- // Can be overridden in subclasses for provider-specific error handling
279
- throw error;
280
- }
281
- }
282
- /**
283
- * Provider factory
284
- */
285
- export class ProviderFactory {
286
- static providers = new Map();
287
- /**
288
- * Register a provider
289
- */
290
- static register(name, providerClass) {
291
- this.providers.set(name.toLowerCase(), providerClass);
292
- logger.info(`Registered OAuth provider: ${name}`);
293
- }
294
- /**
295
- * Create provider instance
296
- */
297
- static create(name, config) {
298
- const ProviderClass = this.providers.get(name.toLowerCase());
299
- if (!ProviderClass) {
300
- throw new Error(`Unknown OAuth provider: ${name}`);
301
- }
302
- // @ts-ignore - TypeScript doesn't understand dynamic class instantiation
303
- return new ProviderClass(config);
304
- }
305
- /**
306
- * Get list of registered providers
307
- */
308
- static getProviders() {
309
- return Array.from(this.providers.keys());
310
- }
311
- }
312
- //# sourceMappingURL=base.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/server/oauth/providers/base.ts"],"names":[],"mappings":"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"}
@@ -1,55 +0,0 @@
1
- import { OAuthProvider, UserInfo, TokenResponse, ProviderConfig } from './base.js';
2
- /**
3
- * GitHub OAuth Provider
4
- * Note: GitHub doesn't support OpenID Connect, so no ID tokens
5
- */
6
- export declare class GitHubOAuthProvider extends OAuthProvider {
7
- readonly name = "github";
8
- readonly authorizationUrl = "https://github.com/login/oauth/authorize";
9
- readonly tokenUrl = "https://github.com/login/oauth/access_token";
10
- readonly userInfoUrl = "https://api.github.com/user";
11
- readonly revokeUrl: undefined;
12
- readonly jwksUrl: undefined;
13
- constructor(config: ProviderConfig);
14
- /**
15
- * Get default scopes for GitHub
16
- */
17
- protected getDefaultScopes(): string[];
18
- /**
19
- * GitHub doesn't use OIDC, so no issuer
20
- */
21
- protected getExpectedIssuer(): string;
22
- /**
23
- * Exchange code for token (GitHub-specific)
24
- */
25
- exchangeCode(code: string, codeVerifier?: string): Promise<TokenResponse>;
26
- /**
27
- * GitHub doesn't support refresh tokens
28
- */
29
- refreshToken(refreshToken: string): Promise<TokenResponse>;
30
- /**
31
- * Get GitHub user info with email addresses
32
- */
33
- getUserInfo(accessToken: string): Promise<UserInfo>;
34
- /**
35
- * Normalize GitHub user info
36
- */
37
- protected normalizeUserInfo(data: any): UserInfo;
38
- /**
39
- * Check if user has access to specific organization
40
- */
41
- checkOrganizationMembership(accessToken: string, org: string): Promise<boolean>;
42
- /**
43
- * Get user's organizations
44
- */
45
- getUserOrganizations(accessToken: string): Promise<any[]>;
46
- /**
47
- * Check repository access
48
- */
49
- checkRepositoryAccess(accessToken: string, owner: string, repo: string): Promise<boolean>;
50
- /**
51
- * Handle GitHub-specific errors
52
- */
53
- protected handleProviderError(error: any): never;
54
- }
55
- //# sourceMappingURL=github.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../../src/server/oauth/providers/github.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGnF;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,aAAa;IACpD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,gBAAgB,8CAA8C;IACvE,QAAQ,CAAC,QAAQ,iDAAiD;IAClE,QAAQ,CAAC,WAAW,iCAAiC;IACrD,QAAQ,CAAC,SAAS,YAAa;IAC/B,QAAQ,CAAC,OAAO,YAAa;gBAEjB,MAAM,EAAE,cAAc;IAQlC;;OAEG;IACH,SAAS,CAAC,gBAAgB,IAAI,MAAM,EAAE;IAUtC;;OAEG;IACH,SAAS,CAAC,iBAAiB,IAAI,MAAM;IAIrC;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA0C/E;;OAEG;IACG,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAIhE;;OAEG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsDzD;;OAEG;IACH,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,GAAG,QAAQ;IAahD;;OAEG;IACG,2BAA2B,CAC/B,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,OAAO,CAAC;IAoBnB;;OAEG;IACG,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAoB/D;;OAEG;IACG,qBAAqB,CACzB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC;IAkBnB;;OAEG;IACH,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK;CAejD"}
@@ -1,225 +0,0 @@
1
- import { OAuthProvider } from './base.js';
2
- import { logger } from '../../../utils/logger.js';
3
- /**
4
- * GitHub OAuth Provider
5
- * Note: GitHub doesn't support OpenID Connect, so no ID tokens
6
- */
7
- export class GitHubOAuthProvider extends OAuthProvider {
8
- name = 'github';
9
- authorizationUrl = 'https://github.com/login/oauth/authorize';
10
- tokenUrl = 'https://github.com/login/oauth/access_token';
11
- userInfoUrl = 'https://api.github.com/user';
12
- revokeUrl = undefined; // GitHub doesn't support token revocation via API
13
- jwksUrl = undefined; // GitHub doesn't use OIDC
14
- constructor(config) {
15
- super(config);
16
- if (!this.config.scopes || this.config.scopes.length === 0) {
17
- this.config.scopes = this.getDefaultScopes();
18
- }
19
- }
20
- /**
21
- * Get default scopes for GitHub
22
- */
23
- getDefaultScopes() {
24
- return [
25
- 'read:user', // Read user profile
26
- 'user:email', // Access email addresses
27
- // Additional scopes as needed:
28
- // 'repo', // Full repository access
29
- // 'read:org', // Read organization membership
30
- ];
31
- }
32
- /**
33
- * GitHub doesn't use OIDC, so no issuer
34
- */
35
- getExpectedIssuer() {
36
- return '';
37
- }
38
- /**
39
- * Exchange code for token (GitHub-specific)
40
- */
41
- async exchangeCode(code, codeVerifier) {
42
- const params = new URLSearchParams({
43
- client_id: this.config.clientId,
44
- client_secret: this.config.clientSecret,
45
- code,
46
- redirect_uri: this.config.redirectUri,
47
- });
48
- try {
49
- const response = await fetch(this.tokenUrl, {
50
- method: 'POST',
51
- headers: {
52
- 'Content-Type': 'application/x-www-form-urlencoded',
53
- 'Accept': 'application/json', // GitHub requires this for JSON response
54
- },
55
- body: params.toString(),
56
- });
57
- if (!response.ok) {
58
- const error = await response.text();
59
- logger.error(`GitHub token exchange failed: ${error}`);
60
- throw new Error(`Token exchange failed: ${response.status}`);
61
- }
62
- const data = await response.json();
63
- // GitHub returns a different format, normalize it
64
- const tokens = {
65
- access_token: data.access_token,
66
- token_type: data.token_type || 'Bearer',
67
- scope: data.scope,
68
- // GitHub doesn't provide refresh tokens or expiry
69
- };
70
- logger.info('Successfully exchanged code for GitHub token');
71
- return tokens;
72
- }
73
- catch (error) {
74
- logger.error('Error exchanging GitHub code:', error);
75
- throw error;
76
- }
77
- }
78
- /**
79
- * GitHub doesn't support refresh tokens
80
- */
81
- async refreshToken(refreshToken) {
82
- throw new Error('GitHub does not support refresh tokens');
83
- }
84
- /**
85
- * Get GitHub user info with email addresses
86
- */
87
- async getUserInfo(accessToken) {
88
- try {
89
- // Get basic user info
90
- const userResponse = await fetch(this.userInfoUrl, {
91
- headers: {
92
- 'Authorization': `Bearer ${accessToken}`,
93
- 'Accept': 'application/vnd.github.v3+json',
94
- },
95
- });
96
- if (!userResponse.ok) {
97
- throw new Error(`Failed to get user info: ${userResponse.status}`);
98
- }
99
- const userData = await userResponse.json();
100
- // Get email addresses (separate endpoint)
101
- let primaryEmail = userData.email;
102
- let emailVerified = false;
103
- try {
104
- const emailResponse = await fetch('https://api.github.com/user/emails', {
105
- headers: {
106
- 'Authorization': `Bearer ${accessToken}`,
107
- 'Accept': 'application/vnd.github.v3+json',
108
- },
109
- });
110
- if (emailResponse.ok) {
111
- const emails = await emailResponse.json();
112
- const primary = emails.find((e) => e.primary);
113
- if (primary) {
114
- primaryEmail = primary.email;
115
- emailVerified = primary.verified;
116
- }
117
- }
118
- }
119
- catch (error) {
120
- logger.warn('Failed to fetch GitHub email addresses:', error);
121
- }
122
- const userInfo = this.normalizeUserInfo({
123
- ...userData,
124
- email: primaryEmail,
125
- email_verified: emailVerified,
126
- });
127
- logger.info(`Retrieved GitHub user info for user ${userInfo.id}`);
128
- return userInfo;
129
- }
130
- catch (error) {
131
- logger.error('Error getting GitHub user info:', error);
132
- throw error;
133
- }
134
- }
135
- /**
136
- * Normalize GitHub user info
137
- */
138
- normalizeUserInfo(data) {
139
- return {
140
- id: data.id?.toString() || '',
141
- email: data.email,
142
- email_verified: data.email_verified || false,
143
- name: data.name || data.login,
144
- picture: data.avatar_url,
145
- locale: undefined, // GitHub doesn't provide locale
146
- provider: this.name,
147
- raw: data,
148
- };
149
- }
150
- /**
151
- * Check if user has access to specific organization
152
- */
153
- async checkOrganizationMembership(accessToken, org) {
154
- try {
155
- const response = await fetch(`https://api.github.com/orgs/${org}/members`, {
156
- headers: {
157
- 'Authorization': `Bearer ${accessToken}`,
158
- 'Accept': 'application/vnd.github.v3+json',
159
- },
160
- });
161
- if (response.status === 204) {
162
- return true; // User is a member
163
- }
164
- return false;
165
- }
166
- catch (error) {
167
- logger.error(`Error checking GitHub org membership:`, error);
168
- return false;
169
- }
170
- }
171
- /**
172
- * Get user's organizations
173
- */
174
- async getUserOrganizations(accessToken) {
175
- try {
176
- const response = await fetch('https://api.github.com/user/orgs', {
177
- headers: {
178
- 'Authorization': `Bearer ${accessToken}`,
179
- 'Accept': 'application/vnd.github.v3+json',
180
- },
181
- });
182
- if (!response.ok) {
183
- throw new Error(`Failed to get organizations: ${response.status}`);
184
- }
185
- return await response.json();
186
- }
187
- catch (error) {
188
- logger.error('Error getting GitHub organizations:', error);
189
- return [];
190
- }
191
- }
192
- /**
193
- * Check repository access
194
- */
195
- async checkRepositoryAccess(accessToken, owner, repo) {
196
- try {
197
- const response = await fetch(`https://api.github.com/repos/${owner}/${repo}`, {
198
- headers: {
199
- 'Authorization': `Bearer ${accessToken}`,
200
- 'Accept': 'application/vnd.github.v3+json',
201
- },
202
- });
203
- return response.ok;
204
- }
205
- catch {
206
- return false;
207
- }
208
- }
209
- /**
210
- * Handle GitHub-specific errors
211
- */
212
- handleProviderError(error) {
213
- if (error.error === 'bad_verification_code') {
214
- throw new Error('Invalid or expired authorization code');
215
- }
216
- if (error.error === 'incorrect_client_credentials') {
217
- throw new Error('Invalid client credentials');
218
- }
219
- if (error.error === 'redirect_uri_mismatch') {
220
- throw new Error('Redirect URI mismatch');
221
- }
222
- throw error;
223
- }
224
- }
225
- //# sourceMappingURL=github.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../../src/server/oauth/providers/github.ts"],"names":[],"mappings":"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"}
@@ -1,49 +0,0 @@
1
- import { OAuthProvider, UserInfo, IdTokenClaims, ProviderConfig } from './base.js';
2
- /**
3
- * Google OAuth 2.0 Provider
4
- * Implements Google Sign-In with OpenID Connect
5
- */
6
- export declare class GoogleOAuthProvider extends OAuthProvider {
7
- readonly name = "google";
8
- readonly authorizationUrl = "https://accounts.google.com/o/oauth2/v2/auth";
9
- readonly tokenUrl = "https://oauth2.googleapis.com/token";
10
- readonly userInfoUrl = "https://www.googleapis.com/oauth2/v2/userinfo";
11
- readonly revokeUrl = "https://oauth2.googleapis.com/revoke";
12
- readonly jwksUrl = "https://www.googleapis.com/oauth2/v3/certs";
13
- constructor(config: ProviderConfig);
14
- /**
15
- * Get default scopes for Google
16
- */
17
- protected getDefaultScopes(): string[];
18
- /**
19
- * Get expected issuer for Google
20
- */
21
- protected getExpectedIssuer(): string;
22
- /**
23
- * Normalize Google user info to common format
24
- */
25
- protected normalizeUserInfo(data: any): UserInfo;
26
- /**
27
- * Additional Google-specific ID token validation
28
- */
29
- protected validateIdTokenClaims(claims: IdTokenClaims): void;
30
- /**
31
- * Google-specific user info enrichment
32
- * Can fetch additional profile data if needed
33
- */
34
- getEnrichedUserInfo(accessToken: string): Promise<UserInfo>;
35
- /**
36
- * Check if user has specific Google service access
37
- */
38
- checkServiceAccess(accessToken: string, service: 'calendar' | 'drive' | 'gmail'): Promise<boolean>;
39
- /**
40
- * Revoke Google tokens
41
- * Google supports revoking both access and refresh tokens
42
- */
43
- revokeToken(token: string, tokenType?: 'access_token' | 'refresh_token'): Promise<void>;
44
- /**
45
- * Handle Google-specific errors
46
- */
47
- protected handleProviderError(error: any): never;
48
- }
49
- //# sourceMappingURL=google.d.ts.map