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.
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 +23 -2
  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
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Cargo Registry Validator (crates.io)
3
+ * Validates Rust package existence from crates.io registry
4
+ */
5
+ export class CargoValidator {
6
+ registryUrl = 'https://crates.io/api/v1';
7
+ cache = new Map();
8
+ cacheTimeout = 5 * 60 * 1000; // 5 minutes
9
+ async validate(packageName, version) {
10
+ // Cargo/Rust crate names use underscores or hyphens
11
+ // crates.io treats them as equivalent
12
+ const normalizedName = packageName.toLowerCase().replace(/-/g, '_');
13
+ const cacheKey = `${normalizedName}${version ? `@${version}` : ''}`;
14
+ const cached = this.cache.get(cacheKey);
15
+ if (cached && Date.now() - cached.timestamp < this.cacheTimeout) {
16
+ return cached.data;
17
+ }
18
+ try {
19
+ // crates.io API endpoint for crate info
20
+ const response = await fetch(`${this.registryUrl}/crates/${packageName}`, {
21
+ headers: {
22
+ 'User-Agent': 'CouchLoop-MCP/1.0 (https://github.com/wisenbergg/couchloop-mcp)'
23
+ }
24
+ });
25
+ if (response.status === 404) {
26
+ const result = {
27
+ name: packageName,
28
+ version,
29
+ registry: 'cargo',
30
+ exists: false,
31
+ lastChecked: new Date()
32
+ };
33
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
34
+ return result;
35
+ }
36
+ if (!response.ok) {
37
+ throw new Error(`Registry returned ${response.status}`);
38
+ }
39
+ const data = await response.json();
40
+ const crate = data.crate;
41
+ // Check if specific version exists
42
+ if (version) {
43
+ // Fetch version-specific info
44
+ const versionResponse = await fetch(`${this.registryUrl}/crates/${packageName}/${version}`, {
45
+ headers: {
46
+ 'User-Agent': 'CouchLoop-MCP/1.0'
47
+ }
48
+ });
49
+ if (versionResponse.status === 404) {
50
+ return {
51
+ name: packageName,
52
+ version,
53
+ registry: 'cargo',
54
+ exists: false,
55
+ latestVersion: crate.max_version,
56
+ lastChecked: new Date()
57
+ };
58
+ }
59
+ if (!versionResponse.ok) {
60
+ throw new Error(`Version check returned ${versionResponse.status}`);
61
+ }
62
+ const versionData = await versionResponse.json();
63
+ const result = {
64
+ name: packageName,
65
+ version: version,
66
+ registry: 'cargo',
67
+ exists: true,
68
+ latestVersion: crate.max_version,
69
+ deprecated: versionData.version?.yanked || false,
70
+ lastChecked: new Date()
71
+ };
72
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
73
+ return result;
74
+ }
75
+ // Return latest version info
76
+ const result = {
77
+ name: packageName,
78
+ version: crate.max_version,
79
+ registry: 'cargo',
80
+ exists: true,
81
+ latestVersion: crate.max_version,
82
+ deprecated: false,
83
+ lastChecked: new Date()
84
+ };
85
+ // Check for security advisories if available
86
+ // Note: crates.io doesn't directly provide this, but RustSec advisory DB could be integrated
87
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
88
+ return result;
89
+ }
90
+ catch (error) {
91
+ console.error(`Failed to validate Cargo package ${packageName}:`, error);
92
+ return {
93
+ name: packageName,
94
+ version,
95
+ registry: 'cargo',
96
+ exists: false,
97
+ warning: 'Could not verify package existence',
98
+ lastChecked: new Date()
99
+ };
100
+ }
101
+ }
102
+ async search(query, limit = 10) {
103
+ try {
104
+ // crates.io search API
105
+ const response = await fetch(`${this.registryUrl}/crates?q=${encodeURIComponent(query)}&per_page=${limit}`, {
106
+ headers: {
107
+ 'User-Agent': 'CouchLoop-MCP/1.0'
108
+ }
109
+ });
110
+ if (!response.ok) {
111
+ return [];
112
+ }
113
+ const data = await response.json();
114
+ return data.crates.map((crate) => ({
115
+ name: crate.name,
116
+ version: crate.max_version,
117
+ registry: 'cargo',
118
+ exists: true,
119
+ latestVersion: crate.max_version,
120
+ lastChecked: new Date()
121
+ }));
122
+ }
123
+ catch (error) {
124
+ console.error(`Failed to search Cargo registry for ${query}:`, error);
125
+ return [];
126
+ }
127
+ }
128
+ clearCache() {
129
+ this.cache.clear();
130
+ }
131
+ }
132
+ //# sourceMappingURL=cargo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cargo.js","sourceRoot":"","sources":["../../../src/developer/validators/cargo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * RubyGems Registry Validator
3
+ * Validates Ruby gem existence from rubygems.org
4
+ */
5
+ import type { PackageInfo, RegistryValidator } from '../types/package.js';
6
+ export declare class GemValidator implements RegistryValidator {
7
+ private readonly registryUrl;
8
+ private cache;
9
+ private readonly cacheTimeout;
10
+ validate(packageName: string, version?: string): Promise<PackageInfo>;
11
+ search(query: string, limit?: number): Promise<PackageInfo[]>;
12
+ clearCache(): void;
13
+ }
14
+ //# sourceMappingURL=gem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gem.d.ts","sourceRoot":"","sources":["../../../src/developer/validators/gem.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE1E,qBAAa,YAAa,YAAW,iBAAiB;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAC7D,OAAO,CAAC,KAAK,CAA+D;IAC5E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAExC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA8DrE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA2B/D,UAAU,IAAI,IAAI;CAGnB"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * RubyGems Registry Validator
3
+ * Validates Ruby gem existence from rubygems.org
4
+ */
5
+ export class GemValidator {
6
+ registryUrl = 'https://rubygems.org/api/v1';
7
+ cache = new Map();
8
+ cacheTimeout = 5 * 60 * 1000; // 5 minutes
9
+ async validate(packageName, version) {
10
+ const cacheKey = `${packageName}${version ? `@${version}` : ''}`;
11
+ const cached = this.cache.get(cacheKey);
12
+ if (cached && Date.now() - cached.timestamp < this.cacheTimeout) {
13
+ return cached.data;
14
+ }
15
+ try {
16
+ // RubyGems API endpoint
17
+ const url = version
18
+ ? `${this.registryUrl}/versions/${packageName}-${version}.json`
19
+ : `${this.registryUrl}/gems/${packageName}.json`;
20
+ const response = await fetch(url);
21
+ if (response.status === 404) {
22
+ const result = {
23
+ name: packageName,
24
+ version,
25
+ registry: 'gem',
26
+ exists: false,
27
+ lastChecked: new Date()
28
+ };
29
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
30
+ return result;
31
+ }
32
+ if (!response.ok) {
33
+ throw new Error(`Registry returned ${response.status}`);
34
+ }
35
+ const data = await response.json();
36
+ const result = {
37
+ name: packageName,
38
+ version: version || data.version,
39
+ registry: 'gem',
40
+ exists: true,
41
+ latestVersion: data.version,
42
+ deprecated: data.yanked || false,
43
+ lastChecked: new Date()
44
+ };
45
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
46
+ return result;
47
+ }
48
+ catch (error) {
49
+ console.error(`Failed to validate Ruby gem ${packageName}:`, error);
50
+ return {
51
+ name: packageName,
52
+ version,
53
+ registry: 'gem',
54
+ exists: false,
55
+ warning: 'Could not verify gem existence',
56
+ lastChecked: new Date()
57
+ };
58
+ }
59
+ }
60
+ async search(query, limit = 10) {
61
+ try {
62
+ const response = await fetch(`${this.registryUrl}/search.json?query=${encodeURIComponent(query)}`);
63
+ if (!response.ok) {
64
+ return [];
65
+ }
66
+ const data = await response.json();
67
+ return data.slice(0, limit).map((gem) => ({
68
+ name: gem.name,
69
+ version: gem.version,
70
+ registry: 'gem',
71
+ exists: true,
72
+ latestVersion: gem.version,
73
+ lastChecked: new Date()
74
+ }));
75
+ }
76
+ catch (error) {
77
+ console.error(`Failed to search RubyGems for ${query}:`, error);
78
+ return [];
79
+ }
80
+ }
81
+ clearCache() {
82
+ this.cache.clear();
83
+ }
84
+ }
85
+ //# sourceMappingURL=gem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gem.js","sourceRoot":"","sources":["../../../src/developer/validators/gem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Go Module Registry Validator
3
+ * Validates Go packages from pkg.go.dev
4
+ */
5
+ import type { PackageInfo, RegistryValidator } from '../types/package.js';
6
+ export declare class GoValidator implements RegistryValidator {
7
+ private readonly proxyUrl;
8
+ private cache;
9
+ private readonly cacheTimeout;
10
+ validate(packageName: string, version?: string): Promise<PackageInfo>;
11
+ search(query: string, limit?: number): Promise<PackageInfo[]>;
12
+ clearCache(): void;
13
+ }
14
+ //# sourceMappingURL=go.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../../src/developer/validators/go.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE1E,qBAAa,WAAY,YAAW,iBAAiB;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IACvD,OAAO,CAAC,KAAK,CAA+D;IAC5E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAExC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA0GrE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAyC/D,UAAU,IAAI,IAAI;CAGnB"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Go Module Registry Validator
3
+ * Validates Go packages from pkg.go.dev
4
+ */
5
+ export class GoValidator {
6
+ proxyUrl = 'https://proxy.golang.org';
7
+ cache = new Map();
8
+ cacheTimeout = 5 * 60 * 1000; // 5 minutes
9
+ async validate(packageName, version) {
10
+ const cacheKey = `${packageName}${version ? `@${version}` : ''}`;
11
+ const cached = this.cache.get(cacheKey);
12
+ if (cached && Date.now() - cached.timestamp < this.cacheTimeout) {
13
+ return cached.data;
14
+ }
15
+ try {
16
+ // Go modules use the proxy.golang.org service
17
+ // Format: https://proxy.golang.org/{module}/@v/list for versions
18
+ const versionListUrl = `${this.proxyUrl}/${packageName}/@v/list`;
19
+ const response = await fetch(versionListUrl);
20
+ if (response.status === 404 || response.status === 410) {
21
+ const result = {
22
+ name: packageName,
23
+ version,
24
+ registry: 'go',
25
+ exists: false,
26
+ lastChecked: new Date()
27
+ };
28
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
29
+ return result;
30
+ }
31
+ if (!response.ok) {
32
+ throw new Error(`Registry returned ${response.status}`);
33
+ }
34
+ const versionList = await response.text();
35
+ const versions = versionList.trim().split('\n').filter(v => v);
36
+ if (versions.length === 0) {
37
+ // Try to get latest version
38
+ const latestUrl = `${this.proxyUrl}/${packageName}/@latest`;
39
+ const latestResponse = await fetch(latestUrl);
40
+ if (latestResponse.status === 404) {
41
+ const result = {
42
+ name: packageName,
43
+ version,
44
+ registry: 'go',
45
+ exists: false,
46
+ lastChecked: new Date()
47
+ };
48
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
49
+ return result;
50
+ }
51
+ if (latestResponse.ok) {
52
+ const latestData = await latestResponse.json();
53
+ const result = {
54
+ name: packageName,
55
+ version: version || latestData.Version,
56
+ registry: 'go',
57
+ exists: true,
58
+ latestVersion: latestData.Version,
59
+ lastChecked: new Date()
60
+ };
61
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
62
+ return result;
63
+ }
64
+ }
65
+ // Check if specific version exists
66
+ if (version && !versions.includes(version)) {
67
+ return {
68
+ name: packageName,
69
+ version,
70
+ registry: 'go',
71
+ exists: false,
72
+ latestVersion: versions[versions.length - 1],
73
+ lastChecked: new Date()
74
+ };
75
+ }
76
+ const result = {
77
+ name: packageName,
78
+ version: version || versions[versions.length - 1],
79
+ registry: 'go',
80
+ exists: true,
81
+ latestVersion: versions[versions.length - 1],
82
+ lastChecked: new Date()
83
+ };
84
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
85
+ return result;
86
+ }
87
+ catch (error) {
88
+ console.error(`Failed to validate Go module ${packageName}:`, error);
89
+ return {
90
+ name: packageName,
91
+ version,
92
+ registry: 'go',
93
+ exists: false,
94
+ warning: 'Could not verify module existence',
95
+ lastChecked: new Date()
96
+ };
97
+ }
98
+ }
99
+ async search(query, limit = 10) {
100
+ try {
101
+ // pkg.go.dev doesn't have a public search API
102
+ // We can only validate exact package names
103
+ // For search, we'll try common patterns
104
+ const commonPrefixes = [
105
+ 'github.com/',
106
+ 'golang.org/x/',
107
+ 'google.golang.org/',
108
+ 'gopkg.in/'
109
+ ];
110
+ const results = [];
111
+ for (const prefix of commonPrefixes) {
112
+ if (results.length >= limit)
113
+ break;
114
+ const fullName = prefix + query;
115
+ const info = await this.validate(fullName);
116
+ if (info.exists) {
117
+ results.push(info);
118
+ }
119
+ }
120
+ // Also try the query as-is
121
+ if (results.length < limit) {
122
+ const directInfo = await this.validate(query);
123
+ if (directInfo.exists) {
124
+ results.push(directInfo);
125
+ }
126
+ }
127
+ return results.slice(0, limit);
128
+ }
129
+ catch (error) {
130
+ console.error(`Failed to search Go modules for ${query}:`, error);
131
+ return [];
132
+ }
133
+ }
134
+ clearCache() {
135
+ this.cache.clear();
136
+ }
137
+ }
138
+ //# sourceMappingURL=go.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go.js","sourceRoot":"","sources":["../../../src/developer/validators/go.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Maven Central Repository Validator
3
+ * Validates Java package existence from Maven Central
4
+ */
5
+ import type { PackageInfo, RegistryValidator } from '../types/package.js';
6
+ export declare class MavenValidator implements RegistryValidator {
7
+ private readonly registryUrl;
8
+ private cache;
9
+ private readonly cacheTimeout;
10
+ validate(packageName: string, version?: string): Promise<PackageInfo>;
11
+ search(query: string, limit?: number): Promise<PackageInfo[]>;
12
+ clearCache(): void;
13
+ }
14
+ //# sourceMappingURL=maven.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maven.d.ts","sourceRoot":"","sources":["../../../src/developer/validators/maven.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE1E,qBAAa,cAAe,YAAW,iBAAiB;IACtD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgD;IAC5E,OAAO,CAAC,KAAK,CAA+D;IAC5E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAExC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAiFrE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA2B/D,UAAU,IAAI,IAAI;CAGnB"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Maven Central Repository Validator
3
+ * Validates Java package existence from Maven Central
4
+ */
5
+ export class MavenValidator {
6
+ registryUrl = 'https://search.maven.org/solrsearch/select';
7
+ cache = new Map();
8
+ cacheTimeout = 5 * 60 * 1000; // 5 minutes
9
+ async validate(packageName, version) {
10
+ // Maven packages are in format groupId:artifactId
11
+ // e.g., "org.springframework:spring-core"
12
+ const parts = packageName.split(':');
13
+ if (parts.length !== 2) {
14
+ return {
15
+ name: packageName,
16
+ version,
17
+ registry: 'maven',
18
+ exists: false,
19
+ warning: 'Invalid Maven package format. Use groupId:artifactId',
20
+ lastChecked: new Date()
21
+ };
22
+ }
23
+ const [groupId, artifactId] = parts;
24
+ const cacheKey = `${packageName}${version ? `@${version}` : ''}`;
25
+ const cached = this.cache.get(cacheKey);
26
+ if (cached && Date.now() - cached.timestamp < this.cacheTimeout) {
27
+ return cached.data;
28
+ }
29
+ try {
30
+ // Build query
31
+ const query = version
32
+ ? `g:"${groupId}" AND a:"${artifactId}" AND v:"${version}"`
33
+ : `g:"${groupId}" AND a:"${artifactId}"`;
34
+ const response = await fetch(`${this.registryUrl}?q=${encodeURIComponent(query)}&rows=1&wt=json`);
35
+ if (!response.ok) {
36
+ throw new Error(`Registry returned ${response.status}`);
37
+ }
38
+ const data = await response.json();
39
+ if (!data.response?.docs?.length) {
40
+ const result = {
41
+ name: packageName,
42
+ version,
43
+ registry: 'maven',
44
+ exists: false,
45
+ lastChecked: new Date()
46
+ };
47
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
48
+ return result;
49
+ }
50
+ const doc = data.response.docs[0];
51
+ const result = {
52
+ name: packageName,
53
+ version: version || doc.latestVersion || doc.v,
54
+ registry: 'maven',
55
+ exists: true,
56
+ latestVersion: doc.latestVersion || doc.v,
57
+ lastChecked: new Date()
58
+ };
59
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
60
+ return result;
61
+ }
62
+ catch (error) {
63
+ console.error(`Failed to validate Maven package ${packageName}:`, error);
64
+ return {
65
+ name: packageName,
66
+ version,
67
+ registry: 'maven',
68
+ exists: false,
69
+ warning: 'Could not verify package existence',
70
+ lastChecked: new Date()
71
+ };
72
+ }
73
+ }
74
+ async search(query, limit = 10) {
75
+ try {
76
+ const response = await fetch(`${this.registryUrl}?q=${encodeURIComponent(query)}&rows=${limit}&wt=json`);
77
+ if (!response.ok) {
78
+ return [];
79
+ }
80
+ const data = await response.json();
81
+ return data.response.docs.map((doc) => ({
82
+ name: `${doc.g}:${doc.a}`,
83
+ version: doc.v,
84
+ registry: 'maven',
85
+ exists: true,
86
+ latestVersion: doc.latestVersion || doc.v,
87
+ lastChecked: new Date()
88
+ }));
89
+ }
90
+ catch (error) {
91
+ console.error(`Failed to search Maven registry for ${query}:`, error);
92
+ return [];
93
+ }
94
+ }
95
+ clearCache() {
96
+ this.cache.clear();
97
+ }
98
+ }
99
+ //# sourceMappingURL=maven.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maven.js","sourceRoot":"","sources":["../../../src/developer/validators/maven.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * NPM Registry Validator
3
+ * Validates package existence and retrieves metadata from npm registry
4
+ */
5
+ import type { PackageInfo, RegistryValidator } from '../types/package.js';
6
+ export declare class NpmValidator implements RegistryValidator {
7
+ private readonly registryUrl;
8
+ private cache;
9
+ private readonly cacheTimeout;
10
+ validate(packageName: string, version?: string): Promise<PackageInfo>;
11
+ search(query: string, limit?: number): Promise<PackageInfo[]>;
12
+ clearCache(): void;
13
+ }
14
+ //# sourceMappingURL=npm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm.d.ts","sourceRoot":"","sources":["../../../src/developer/validators/npm.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE1E,qBAAa,YAAa,YAAW,iBAAiB;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgC;IAC5D,OAAO,CAAC,KAAK,CAA+D;IAC5E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAExC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAyErE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA0B/D,UAAU,IAAI,IAAI;CAGnB"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * NPM Registry Validator
3
+ * Validates package existence and retrieves metadata from npm registry
4
+ */
5
+ export class NpmValidator {
6
+ registryUrl = 'https://registry.npmjs.org';
7
+ cache = new Map();
8
+ cacheTimeout = 5 * 60 * 1000; // 5 minutes
9
+ async validate(packageName, version) {
10
+ // Check cache first
11
+ const cacheKey = `${packageName}${version ? `@${version}` : ''}`;
12
+ const cached = this.cache.get(cacheKey);
13
+ if (cached && Date.now() - cached.timestamp < this.cacheTimeout) {
14
+ return cached.data;
15
+ }
16
+ try {
17
+ const response = await fetch(`${this.registryUrl}/${packageName}`);
18
+ if (response.status === 404) {
19
+ const result = {
20
+ name: packageName,
21
+ version,
22
+ registry: 'npm',
23
+ exists: false,
24
+ lastChecked: new Date()
25
+ };
26
+ // Cache negative result for shorter time
27
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
28
+ return result;
29
+ }
30
+ if (!response.ok) {
31
+ throw new Error(`Registry returned ${response.status}`);
32
+ }
33
+ const data = await response.json();
34
+ // Check if specific version exists
35
+ if (version && !data.versions?.[version]) {
36
+ return {
37
+ name: packageName,
38
+ version,
39
+ registry: 'npm',
40
+ exists: false,
41
+ latestVersion: data['dist-tags']?.latest,
42
+ lastChecked: new Date()
43
+ };
44
+ }
45
+ const result = {
46
+ name: packageName,
47
+ version: version || data['dist-tags']?.latest,
48
+ registry: 'npm',
49
+ exists: true,
50
+ latestVersion: data['dist-tags']?.latest,
51
+ deprecated: data.deprecated || data.versions?.[version || data['dist-tags']?.latest]?.deprecated,
52
+ lastChecked: new Date()
53
+ };
54
+ // Cache positive result
55
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
56
+ return result;
57
+ }
58
+ catch (error) {
59
+ console.error(`Failed to validate npm package ${packageName}:`, error);
60
+ // Return unknown state rather than false positive
61
+ return {
62
+ name: packageName,
63
+ version,
64
+ registry: 'npm',
65
+ exists: false, // Safe default - block if we can't verify
66
+ warning: 'Could not verify package existence',
67
+ lastChecked: new Date()
68
+ };
69
+ }
70
+ }
71
+ async search(query, limit = 10) {
72
+ try {
73
+ const response = await fetch(`https://registry.npmjs.org/-/v1/search?text=${encodeURIComponent(query)}&size=${limit}`);
74
+ if (!response.ok) {
75
+ return [];
76
+ }
77
+ const data = await response.json();
78
+ return data.objects.map((obj) => ({
79
+ name: obj.package.name,
80
+ version: obj.package.version,
81
+ registry: 'npm',
82
+ exists: true,
83
+ latestVersion: obj.package.version,
84
+ lastChecked: new Date()
85
+ }));
86
+ }
87
+ catch (error) {
88
+ console.error(`Failed to search npm registry for ${query}:`, error);
89
+ return [];
90
+ }
91
+ }
92
+ clearCache() {
93
+ this.cache.clear();
94
+ }
95
+ }
96
+ //# sourceMappingURL=npm.js.map