vaspera 2.9.2 → 2.10.1

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 (327) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/README.md +58 -1
  3. package/dist/__tests__/autofix/branch-manager.test.d.ts +2 -0
  4. package/dist/__tests__/autofix/branch-manager.test.d.ts.map +1 -0
  5. package/dist/__tests__/autofix/branch-manager.test.js +60 -0
  6. package/dist/__tests__/autofix/branch-manager.test.js.map +1 -0
  7. package/dist/__tests__/autofix/commit-generator.test.d.ts +2 -0
  8. package/dist/__tests__/autofix/commit-generator.test.d.ts.map +1 -0
  9. package/dist/__tests__/autofix/commit-generator.test.js +147 -0
  10. package/dist/__tests__/autofix/commit-generator.test.js.map +1 -0
  11. package/dist/__tests__/autofix/constitution.test.d.ts +9 -0
  12. package/dist/__tests__/autofix/constitution.test.d.ts.map +1 -0
  13. package/dist/__tests__/autofix/constitution.test.js +421 -0
  14. package/dist/__tests__/autofix/constitution.test.js.map +1 -0
  15. package/dist/__tests__/autofix/pr-generator.test.d.ts +2 -0
  16. package/dist/__tests__/autofix/pr-generator.test.d.ts.map +1 -0
  17. package/dist/__tests__/autofix/pr-generator.test.js +152 -0
  18. package/dist/__tests__/autofix/pr-generator.test.js.map +1 -0
  19. package/dist/__tests__/property-test-helpers.d.ts +87 -0
  20. package/dist/__tests__/property-test-helpers.d.ts.map +1 -0
  21. package/dist/__tests__/property-test-helpers.js +136 -0
  22. package/dist/__tests__/property-test-helpers.js.map +1 -0
  23. package/dist/__tests__/scanners/ai-code/ai-detector.test.d.ts +2 -0
  24. package/dist/__tests__/scanners/ai-code/ai-detector.test.d.ts.map +1 -0
  25. package/dist/__tests__/scanners/ai-code/ai-detector.test.js +188 -0
  26. package/dist/__tests__/scanners/ai-code/ai-detector.test.js.map +1 -0
  27. package/dist/__tests__/scanners/ai-code/confidence-scorer.test.d.ts +2 -0
  28. package/dist/__tests__/scanners/ai-code/confidence-scorer.test.d.ts.map +1 -0
  29. package/dist/__tests__/scanners/ai-code/confidence-scorer.test.js +363 -0
  30. package/dist/__tests__/scanners/ai-code/confidence-scorer.test.js.map +1 -0
  31. package/dist/__tests__/scanners/ai-code/hallucination-checker.test.d.ts +2 -0
  32. package/dist/__tests__/scanners/ai-code/hallucination-checker.test.d.ts.map +1 -0
  33. package/dist/__tests__/scanners/ai-code/hallucination-checker.test.js +226 -0
  34. package/dist/__tests__/scanners/ai-code/hallucination-checker.test.js.map +1 -0
  35. package/dist/__tests__/scanners/ai-code/index.test.d.ts +2 -0
  36. package/dist/__tests__/scanners/ai-code/index.test.d.ts.map +1 -0
  37. package/dist/__tests__/scanners/ai-code/index.test.js +214 -0
  38. package/dist/__tests__/scanners/ai-code/index.test.js.map +1 -0
  39. package/dist/__tests__/scanners/dast/index.test.d.ts +2 -0
  40. package/dist/__tests__/scanners/dast/index.test.d.ts.map +1 -0
  41. package/dist/__tests__/scanners/dast/index.test.js +183 -0
  42. package/dist/__tests__/scanners/dast/index.test.js.map +1 -0
  43. package/dist/__tests__/scanners/dast/nuclei.test.d.ts +2 -0
  44. package/dist/__tests__/scanners/dast/nuclei.test.d.ts.map +1 -0
  45. package/dist/__tests__/scanners/dast/nuclei.test.js +166 -0
  46. package/dist/__tests__/scanners/dast/nuclei.test.js.map +1 -0
  47. package/dist/__tests__/scanners/dast/zap.test.d.ts +2 -0
  48. package/dist/__tests__/scanners/dast/zap.test.d.ts.map +1 -0
  49. package/dist/__tests__/scanners/dast/zap.test.js +158 -0
  50. package/dist/__tests__/scanners/dast/zap.test.js.map +1 -0
  51. package/dist/__tests__/scanners/deploy/health-checker.test.d.ts +2 -0
  52. package/dist/__tests__/scanners/deploy/health-checker.test.d.ts.map +1 -0
  53. package/dist/__tests__/scanners/deploy/health-checker.test.js +67 -0
  54. package/dist/__tests__/scanners/deploy/health-checker.test.js.map +1 -0
  55. package/dist/__tests__/scanners/deploy/index.test.d.ts +2 -0
  56. package/dist/__tests__/scanners/deploy/index.test.d.ts.map +1 -0
  57. package/dist/__tests__/scanners/deploy/index.test.js +84 -0
  58. package/dist/__tests__/scanners/deploy/index.test.js.map +1 -0
  59. package/dist/__tests__/scanners/deploy/provider-detector.test.d.ts +2 -0
  60. package/dist/__tests__/scanners/deploy/provider-detector.test.d.ts.map +1 -0
  61. package/dist/__tests__/scanners/deploy/provider-detector.test.js +88 -0
  62. package/dist/__tests__/scanners/deploy/provider-detector.test.js.map +1 -0
  63. package/dist/__tests__/scanners/deploy/types.test.d.ts +2 -0
  64. package/dist/__tests__/scanners/deploy/types.test.d.ts.map +1 -0
  65. package/dist/__tests__/scanners/deploy/types.test.js +126 -0
  66. package/dist/__tests__/scanners/deploy/types.test.js.map +1 -0
  67. package/dist/__tests__/scanners/fp-feedback.test.d.ts +2 -0
  68. package/dist/__tests__/scanners/fp-feedback.test.d.ts.map +1 -0
  69. package/dist/__tests__/scanners/fp-feedback.test.js +202 -0
  70. package/dist/__tests__/scanners/fp-feedback.test.js.map +1 -0
  71. package/dist/__tests__/scanners/fp-filter.property.test.d.ts +9 -0
  72. package/dist/__tests__/scanners/fp-filter.property.test.d.ts.map +1 -0
  73. package/dist/__tests__/scanners/fp-filter.property.test.js +253 -0
  74. package/dist/__tests__/scanners/fp-filter.property.test.js.map +1 -0
  75. package/dist/__tests__/scanners/fp-filter.test.d.ts +2 -0
  76. package/dist/__tests__/scanners/fp-filter.test.d.ts.map +1 -0
  77. package/dist/__tests__/scanners/fp-filter.test.js +234 -0
  78. package/dist/__tests__/scanners/fp-filter.test.js.map +1 -0
  79. package/dist/__tests__/scanners/fp-tracker.test.d.ts +2 -0
  80. package/dist/__tests__/scanners/fp-tracker.test.d.ts.map +1 -0
  81. package/dist/__tests__/scanners/fp-tracker.test.js +262 -0
  82. package/dist/__tests__/scanners/fp-tracker.test.js.map +1 -0
  83. package/dist/__tests__/scanners/logic/endpoint-analyzer.property.test.d.ts +10 -0
  84. package/dist/__tests__/scanners/logic/endpoint-analyzer.property.test.d.ts.map +1 -0
  85. package/dist/__tests__/scanners/logic/endpoint-analyzer.property.test.js +238 -0
  86. package/dist/__tests__/scanners/logic/endpoint-analyzer.property.test.js.map +1 -0
  87. package/dist/__tests__/scanners/logic/endpoint-analyzer.test.d.ts +2 -0
  88. package/dist/__tests__/scanners/logic/endpoint-analyzer.test.d.ts.map +1 -0
  89. package/dist/__tests__/scanners/logic/endpoint-analyzer.test.js +55 -0
  90. package/dist/__tests__/scanners/logic/endpoint-analyzer.test.js.map +1 -0
  91. package/dist/__tests__/scanners/logic/index.test.d.ts +2 -0
  92. package/dist/__tests__/scanners/logic/index.test.d.ts.map +1 -0
  93. package/dist/__tests__/scanners/logic/index.test.js +165 -0
  94. package/dist/__tests__/scanners/logic/index.test.js.map +1 -0
  95. package/dist/__tests__/scanners/logic/types.test.d.ts +2 -0
  96. package/dist/__tests__/scanners/logic/types.test.d.ts.map +1 -0
  97. package/dist/__tests__/scanners/logic/types.test.js +85 -0
  98. package/dist/__tests__/scanners/logic/types.test.js.map +1 -0
  99. package/dist/__tests__/scanners/runtime/app-launcher.test.d.ts +2 -0
  100. package/dist/__tests__/scanners/runtime/app-launcher.test.d.ts.map +1 -0
  101. package/dist/__tests__/scanners/runtime/app-launcher.test.js +94 -0
  102. package/dist/__tests__/scanners/runtime/app-launcher.test.js.map +1 -0
  103. package/dist/__tests__/scanners/runtime/golden-path-runner.test.d.ts +2 -0
  104. package/dist/__tests__/scanners/runtime/golden-path-runner.test.d.ts.map +1 -0
  105. package/dist/__tests__/scanners/runtime/golden-path-runner.test.js +195 -0
  106. package/dist/__tests__/scanners/runtime/golden-path-runner.test.js.map +1 -0
  107. package/dist/__tests__/scanners/runtime/index.test.d.ts +2 -0
  108. package/dist/__tests__/scanners/runtime/index.test.d.ts.map +1 -0
  109. package/dist/__tests__/scanners/runtime/index.test.js +120 -0
  110. package/dist/__tests__/scanners/runtime/index.test.js.map +1 -0
  111. package/dist/__tests__/scanners/runtime/types.test.d.ts +2 -0
  112. package/dist/__tests__/scanners/runtime/types.test.d.ts.map +1 -0
  113. package/dist/__tests__/scanners/runtime/types.test.js +126 -0
  114. package/dist/__tests__/scanners/runtime/types.test.js.map +1 -0
  115. package/dist/__tests__/scanners/scale/bottleneck-detector.test.d.ts +2 -0
  116. package/dist/__tests__/scanners/scale/bottleneck-detector.test.d.ts.map +1 -0
  117. package/dist/__tests__/scanners/scale/bottleneck-detector.test.js +187 -0
  118. package/dist/__tests__/scanners/scale/bottleneck-detector.test.js.map +1 -0
  119. package/dist/__tests__/scanners/scale/index.test.d.ts +2 -0
  120. package/dist/__tests__/scanners/scale/index.test.d.ts.map +1 -0
  121. package/dist/__tests__/scanners/scale/index.test.js +87 -0
  122. package/dist/__tests__/scanners/scale/index.test.js.map +1 -0
  123. package/dist/__tests__/scanners/scale/load-profiler.test.d.ts +2 -0
  124. package/dist/__tests__/scanners/scale/load-profiler.test.d.ts.map +1 -0
  125. package/dist/__tests__/scanners/scale/load-profiler.test.js +122 -0
  126. package/dist/__tests__/scanners/scale/load-profiler.test.js.map +1 -0
  127. package/dist/__tests__/scanners/scale/types.test.d.ts +2 -0
  128. package/dist/__tests__/scanners/scale/types.test.d.ts.map +1 -0
  129. package/dist/__tests__/scanners/scale/types.test.js +129 -0
  130. package/dist/__tests__/scanners/scale/types.test.js.map +1 -0
  131. package/dist/action/pr-comment.test.js +4 -0
  132. package/dist/action/pr-comment.test.js.map +1 -1
  133. package/dist/action/sarif-upload.test.js +4 -0
  134. package/dist/action/sarif-upload.test.js.map +1 -1
  135. package/dist/autofix/branch-manager.d.ts +115 -0
  136. package/dist/autofix/branch-manager.d.ts.map +1 -0
  137. package/dist/autofix/branch-manager.js +308 -0
  138. package/dist/autofix/branch-manager.js.map +1 -0
  139. package/dist/autofix/commit-generator.d.ts +55 -0
  140. package/dist/autofix/commit-generator.d.ts.map +1 -0
  141. package/dist/autofix/commit-generator.js +277 -0
  142. package/dist/autofix/commit-generator.js.map +1 -0
  143. package/dist/autofix/constitution.d.ts +77 -0
  144. package/dist/autofix/constitution.d.ts.map +1 -0
  145. package/dist/autofix/constitution.js +261 -0
  146. package/dist/autofix/constitution.js.map +1 -0
  147. package/dist/autofix/constitution.schema.d.ts +441 -0
  148. package/dist/autofix/constitution.schema.d.ts.map +1 -0
  149. package/dist/autofix/constitution.schema.js +144 -0
  150. package/dist/autofix/constitution.schema.js.map +1 -0
  151. package/dist/autofix/index.d.ts +13 -0
  152. package/dist/autofix/index.d.ts.map +1 -0
  153. package/dist/autofix/index.js +15 -0
  154. package/dist/autofix/index.js.map +1 -0
  155. package/dist/autofix/pr-generator.d.ts +57 -0
  156. package/dist/autofix/pr-generator.d.ts.map +1 -0
  157. package/dist/autofix/pr-generator.js +597 -0
  158. package/dist/autofix/pr-generator.js.map +1 -0
  159. package/dist/autofix/types.d.ts +151 -0
  160. package/dist/autofix/types.d.ts.map +1 -0
  161. package/dist/autofix/types.js +22 -0
  162. package/dist/autofix/types.js.map +1 -0
  163. package/dist/eval/fixtures.d.ts +20 -0
  164. package/dist/eval/fixtures.d.ts.map +1 -1
  165. package/dist/eval/fixtures.js +430 -0
  166. package/dist/eval/fixtures.js.map +1 -1
  167. package/dist/index.d.ts.map +1 -1
  168. package/dist/index.js +874 -0
  169. package/dist/index.js.map +1 -1
  170. package/dist/install-skills.d.ts +11 -0
  171. package/dist/install-skills.d.ts.map +1 -0
  172. package/dist/install-skills.js +81 -0
  173. package/dist/install-skills.js.map +1 -0
  174. package/dist/scanners/ai-code/ai-detector.d.ts +25 -0
  175. package/dist/scanners/ai-code/ai-detector.d.ts.map +1 -0
  176. package/dist/scanners/ai-code/ai-detector.js +192 -0
  177. package/dist/scanners/ai-code/ai-detector.js.map +1 -0
  178. package/dist/scanners/ai-code/confidence-scorer.d.ts +40 -0
  179. package/dist/scanners/ai-code/confidence-scorer.d.ts.map +1 -0
  180. package/dist/scanners/ai-code/confidence-scorer.js +148 -0
  181. package/dist/scanners/ai-code/confidence-scorer.js.map +1 -0
  182. package/dist/scanners/ai-code/hallucination-checker.d.ts +36 -0
  183. package/dist/scanners/ai-code/hallucination-checker.d.ts.map +1 -0
  184. package/dist/scanners/ai-code/hallucination-checker.js +298 -0
  185. package/dist/scanners/ai-code/hallucination-checker.js.map +1 -0
  186. package/dist/scanners/ai-code/index.d.ts +30 -0
  187. package/dist/scanners/ai-code/index.d.ts.map +1 -0
  188. package/dist/scanners/ai-code/index.js +224 -0
  189. package/dist/scanners/ai-code/index.js.map +1 -0
  190. package/dist/scanners/ai-code/types.d.ts +192 -0
  191. package/dist/scanners/ai-code/types.d.ts.map +1 -0
  192. package/dist/scanners/ai-code/types.js +37 -0
  193. package/dist/scanners/ai-code/types.js.map +1 -0
  194. package/dist/scanners/cache.d.ts.map +1 -1
  195. package/dist/scanners/cache.js +4 -0
  196. package/dist/scanners/cache.js.map +1 -1
  197. package/dist/scanners/dast/index.d.ts +39 -0
  198. package/dist/scanners/dast/index.d.ts.map +1 -0
  199. package/dist/scanners/dast/index.js +259 -0
  200. package/dist/scanners/dast/index.js.map +1 -0
  201. package/dist/scanners/dast/nuclei.d.ts +26 -0
  202. package/dist/scanners/dast/nuclei.d.ts.map +1 -0
  203. package/dist/scanners/dast/nuclei.js +354 -0
  204. package/dist/scanners/dast/nuclei.js.map +1 -0
  205. package/dist/scanners/dast/types.d.ts +306 -0
  206. package/dist/scanners/dast/types.d.ts.map +1 -0
  207. package/dist/scanners/dast/types.js +52 -0
  208. package/dist/scanners/dast/types.js.map +1 -0
  209. package/dist/scanners/dast/zap.d.ts +26 -0
  210. package/dist/scanners/dast/zap.d.ts.map +1 -0
  211. package/dist/scanners/dast/zap.js +453 -0
  212. package/dist/scanners/dast/zap.js.map +1 -0
  213. package/dist/scanners/deploy/health-checker.d.ts +38 -0
  214. package/dist/scanners/deploy/health-checker.d.ts.map +1 -0
  215. package/dist/scanners/deploy/health-checker.js +272 -0
  216. package/dist/scanners/deploy/health-checker.js.map +1 -0
  217. package/dist/scanners/deploy/index.d.ts +44 -0
  218. package/dist/scanners/deploy/index.d.ts.map +1 -0
  219. package/dist/scanners/deploy/index.js +208 -0
  220. package/dist/scanners/deploy/index.js.map +1 -0
  221. package/dist/scanners/deploy/provider-detector.d.ts +25 -0
  222. package/dist/scanners/deploy/provider-detector.d.ts.map +1 -0
  223. package/dist/scanners/deploy/provider-detector.js +177 -0
  224. package/dist/scanners/deploy/provider-detector.js.map +1 -0
  225. package/dist/scanners/deploy/types.d.ts +406 -0
  226. package/dist/scanners/deploy/types.d.ts.map +1 -0
  227. package/dist/scanners/deploy/types.js +58 -0
  228. package/dist/scanners/deploy/types.js.map +1 -0
  229. package/dist/scanners/deploy/vercel-integration.d.ts +52 -0
  230. package/dist/scanners/deploy/vercel-integration.d.ts.map +1 -0
  231. package/dist/scanners/deploy/vercel-integration.js +280 -0
  232. package/dist/scanners/deploy/vercel-integration.js.map +1 -0
  233. package/dist/scanners/fp-feedback.d.ts +140 -0
  234. package/dist/scanners/fp-feedback.d.ts.map +1 -0
  235. package/dist/scanners/fp-feedback.js +292 -0
  236. package/dist/scanners/fp-feedback.js.map +1 -0
  237. package/dist/scanners/fp-filter.d.ts +94 -0
  238. package/dist/scanners/fp-filter.d.ts.map +1 -0
  239. package/dist/scanners/fp-filter.js +397 -0
  240. package/dist/scanners/fp-filter.js.map +1 -0
  241. package/dist/scanners/fp-tracker.d.ts +125 -0
  242. package/dist/scanners/fp-tracker.d.ts.map +1 -0
  243. package/dist/scanners/fp-tracker.js +330 -0
  244. package/dist/scanners/fp-tracker.js.map +1 -0
  245. package/dist/scanners/index.d.ts.map +1 -1
  246. package/dist/scanners/index.js +56 -0
  247. package/dist/scanners/index.js.map +1 -1
  248. package/dist/scanners/index.test.js +6 -6
  249. package/dist/scanners/index.test.js.map +1 -1
  250. package/dist/scanners/logic/auth-flow-analyzer.d.ts +18 -0
  251. package/dist/scanners/logic/auth-flow-analyzer.d.ts.map +1 -0
  252. package/dist/scanners/logic/auth-flow-analyzer.js +384 -0
  253. package/dist/scanners/logic/auth-flow-analyzer.js.map +1 -0
  254. package/dist/scanners/logic/endpoint-analyzer.d.ts +29 -0
  255. package/dist/scanners/logic/endpoint-analyzer.d.ts.map +1 -0
  256. package/dist/scanners/logic/endpoint-analyzer.js +528 -0
  257. package/dist/scanners/logic/endpoint-analyzer.js.map +1 -0
  258. package/dist/scanners/logic/index.d.ts +41 -0
  259. package/dist/scanners/logic/index.d.ts.map +1 -0
  260. package/dist/scanners/logic/index.js +268 -0
  261. package/dist/scanners/logic/index.js.map +1 -0
  262. package/dist/scanners/logic/types.d.ts +254 -0
  263. package/dist/scanners/logic/types.d.ts.map +1 -0
  264. package/dist/scanners/logic/types.js +142 -0
  265. package/dist/scanners/logic/types.js.map +1 -0
  266. package/dist/scanners/runtime/app-launcher.d.ts +33 -0
  267. package/dist/scanners/runtime/app-launcher.d.ts.map +1 -0
  268. package/dist/scanners/runtime/app-launcher.js +419 -0
  269. package/dist/scanners/runtime/app-launcher.js.map +1 -0
  270. package/dist/scanners/runtime/golden-path-runner.d.ts +48 -0
  271. package/dist/scanners/runtime/golden-path-runner.d.ts.map +1 -0
  272. package/dist/scanners/runtime/golden-path-runner.js +373 -0
  273. package/dist/scanners/runtime/golden-path-runner.js.map +1 -0
  274. package/dist/scanners/runtime/index.d.ts +41 -0
  275. package/dist/scanners/runtime/index.d.ts.map +1 -0
  276. package/dist/scanners/runtime/index.js +164 -0
  277. package/dist/scanners/runtime/index.js.map +1 -0
  278. package/dist/scanners/runtime/playwright-executor.d.ts +50 -0
  279. package/dist/scanners/runtime/playwright-executor.d.ts.map +1 -0
  280. package/dist/scanners/runtime/playwright-executor.js +387 -0
  281. package/dist/scanners/runtime/playwright-executor.js.map +1 -0
  282. package/dist/scanners/runtime/types.d.ts +215 -0
  283. package/dist/scanners/runtime/types.d.ts.map +1 -0
  284. package/dist/scanners/runtime/types.js +40 -0
  285. package/dist/scanners/runtime/types.js.map +1 -0
  286. package/dist/scanners/scale/bottleneck-detector.d.ts +17 -0
  287. package/dist/scanners/scale/bottleneck-detector.d.ts.map +1 -0
  288. package/dist/scanners/scale/bottleneck-detector.js +250 -0
  289. package/dist/scanners/scale/bottleneck-detector.js.map +1 -0
  290. package/dist/scanners/scale/capacity-estimator.d.ts +17 -0
  291. package/dist/scanners/scale/capacity-estimator.d.ts.map +1 -0
  292. package/dist/scanners/scale/capacity-estimator.js +197 -0
  293. package/dist/scanners/scale/capacity-estimator.js.map +1 -0
  294. package/dist/scanners/scale/index.d.ts +37 -0
  295. package/dist/scanners/scale/index.d.ts.map +1 -0
  296. package/dist/scanners/scale/index.js +101 -0
  297. package/dist/scanners/scale/index.js.map +1 -0
  298. package/dist/scanners/scale/load-profiler.d.ts +48 -0
  299. package/dist/scanners/scale/load-profiler.d.ts.map +1 -0
  300. package/dist/scanners/scale/load-profiler.js +377 -0
  301. package/dist/scanners/scale/load-profiler.js.map +1 -0
  302. package/dist/scanners/scale/types.d.ts +529 -0
  303. package/dist/scanners/scale/types.d.ts.map +1 -0
  304. package/dist/scanners/scale/types.js +57 -0
  305. package/dist/scanners/scale/types.js.map +1 -0
  306. package/dist/scanners/secrets.d.ts.map +1 -1
  307. package/dist/scanners/secrets.js +13 -2
  308. package/dist/scanners/secrets.js.map +1 -1
  309. package/dist/scanners/types.d.ts +1 -1
  310. package/dist/scanners/types.d.ts.map +1 -1
  311. package/dist/scanners/types.js +4 -0
  312. package/dist/scanners/types.js.map +1 -1
  313. package/package.json +8 -4
  314. package/skills/vaspera-add-tests/SKILL.md +102 -0
  315. package/skills/vaspera-ai-verify/SKILL.md +166 -0
  316. package/skills/vaspera-audit/SKILL.md +67 -0
  317. package/skills/vaspera-certify/SKILL.md +130 -0
  318. package/skills/vaspera-deploy/SKILL.md +152 -0
  319. package/skills/vaspera-fix-critical/SKILL.md +52 -0
  320. package/skills/vaspera-fix-high/SKILL.md +81 -0
  321. package/skills/vaspera-fix-medium/SKILL.md +56 -0
  322. package/skills/vaspera-fix-rls/SKILL.md +85 -0
  323. package/skills/vaspera-harden/SKILL.md +102 -0
  324. package/skills/vaspera-help/SKILL.md +61 -0
  325. package/skills/vaspera-load-test/SKILL.md +167 -0
  326. package/skills/vaspera-verify/SKILL.md +70 -0
  327. package/skills/vaspera-verify-e2e/SKILL.md +117 -0
@@ -0,0 +1,268 @@
1
+ /**
2
+ * Business Logic Scanner Module
3
+ *
4
+ * Detects BOLA, IDOR, BFLA, and other authorization vulnerabilities
5
+ * through static analysis of API endpoints.
6
+ *
7
+ * @module scanners/logic
8
+ */
9
+ import { logger } from "../../logger.js";
10
+ import { LOGIC_VULN_CWE_MAP, LOGIC_VULN_OWASP_MAP, LOGIC_VULN_SEVERITY_MAP, } from "./types.js";
11
+ import { extractEndpoints, detectFramework, } from "./endpoint-analyzer.js";
12
+ import { analyzeEndpoints, } from "./auth-flow-analyzer.js";
13
+ // Re-export types
14
+ export * from "./types.js";
15
+ // Re-export analyzer functions
16
+ export { extractEndpoints, detectFramework, extractPathParams, inferResourceType, } from "./endpoint-analyzer.js";
17
+ export { analyzeAuthorizationFlow, analyzeEndpoints, } from "./auth-flow-analyzer.js";
18
+ /**
19
+ * Convert logic vulnerability to finding format
20
+ */
21
+ function vulnerabilityToFinding(vuln) {
22
+ return {
23
+ scanner: "logic",
24
+ ruleId: `logic-${vuln.vulnType}`,
25
+ file: vuln.file,
26
+ line: vuln.line,
27
+ message: vuln.description,
28
+ severity: vuln.severity,
29
+ confidence: vuln.confidence,
30
+ category: vuln.vulnType,
31
+ vulnType: vuln.vulnType,
32
+ affectedEndpoint: vuln.endpoint,
33
+ httpMethod: vuln.method,
34
+ authCheck: vuln.authCheck,
35
+ resourceAccess: vuln.resourceAccess,
36
+ cweIds: vuln.cweIds,
37
+ owaspRefs: vuln.owaspRefs,
38
+ remediation: vuln.remediation,
39
+ };
40
+ }
41
+ /**
42
+ * Run logic vulnerability scan
43
+ */
44
+ export async function runLogicScan(projectPath, options = {}) {
45
+ const startTime = Date.now();
46
+ logger.info("logic_scan.start", {
47
+ projectPath,
48
+ framework: options.framework || "auto",
49
+ focusAreas: options.focusAreas,
50
+ });
51
+ try {
52
+ // Detect framework if not specified
53
+ const framework = options.framework || (await detectFramework(projectPath));
54
+ // Extract endpoints
55
+ const endpoints = await extractEndpoints(projectPath, {
56
+ framework,
57
+ include: options.include,
58
+ exclude: options.exclude,
59
+ });
60
+ // Limit files if specified
61
+ const limitedEndpoints = options.maxFiles
62
+ ? endpoints.slice(0, options.maxFiles)
63
+ : endpoints;
64
+ // Analyze authorization flows
65
+ const analyses = await analyzeEndpoints(limitedEndpoints, projectPath);
66
+ // Collect all vulnerabilities
67
+ let allVulnerabilities = [];
68
+ for (const analysis of analyses) {
69
+ allVulnerabilities.push(...analysis.vulnerabilities);
70
+ }
71
+ // Filter by focus areas if specified
72
+ if (options.focusAreas && options.focusAreas.length > 0) {
73
+ allVulnerabilities = allVulnerabilities.filter((v) => options.focusAreas.includes(v.vulnType));
74
+ }
75
+ // Convert to findings
76
+ const findings = allVulnerabilities.map(vulnerabilityToFinding);
77
+ // Calculate stats
78
+ const bySeverity = {};
79
+ const byVulnType = {};
80
+ for (const vuln of allVulnerabilities) {
81
+ bySeverity[vuln.severity] = (bySeverity[vuln.severity] || 0) + 1;
82
+ byVulnType[vuln.vulnType] = (byVulnType[vuln.vulnType] || 0) + 1;
83
+ }
84
+ const duration = Date.now() - startTime;
85
+ logger.info("logic_scan.complete", {
86
+ endpoints: endpoints.length,
87
+ vulnerabilities: allVulnerabilities.length,
88
+ duration,
89
+ });
90
+ return {
91
+ projectPath,
92
+ framework,
93
+ endpoints: limitedEndpoints,
94
+ vulnerabilities: allVulnerabilities,
95
+ findings,
96
+ stats: {
97
+ filesAnalyzed: new Set(endpoints.map((e) => e.file)).size,
98
+ endpointsFound: endpoints.length,
99
+ vulnerabilitiesFound: allVulnerabilities.length,
100
+ bySeverity,
101
+ byVulnType,
102
+ },
103
+ duration,
104
+ success: true,
105
+ };
106
+ }
107
+ catch (error) {
108
+ const duration = Date.now() - startTime;
109
+ logger.error("logic_scan.failed", { error: String(error) });
110
+ return {
111
+ projectPath,
112
+ framework: options.framework || "auto",
113
+ endpoints: [],
114
+ vulnerabilities: [],
115
+ findings: [],
116
+ stats: {
117
+ filesAnalyzed: 0,
118
+ endpointsFound: 0,
119
+ vulnerabilitiesFound: 0,
120
+ bySeverity: {},
121
+ byVulnType: {},
122
+ },
123
+ duration,
124
+ success: false,
125
+ error: String(error),
126
+ };
127
+ }
128
+ }
129
+ /**
130
+ * Format logic scan results for display
131
+ */
132
+ export function formatLogicResults(result) {
133
+ const lines = [
134
+ "# Business Logic Security Scan",
135
+ "",
136
+ `**Framework**: ${result.framework}`,
137
+ `**Endpoints Analyzed**: ${result.stats.endpointsFound}`,
138
+ `**Vulnerabilities Found**: ${result.stats.vulnerabilitiesFound}`,
139
+ `**Duration**: ${Math.round(result.duration / 1000)}s`,
140
+ "",
141
+ ];
142
+ if (!result.success) {
143
+ lines.push(`**Error**: ${result.error}`);
144
+ return lines.join("\n");
145
+ }
146
+ if (result.vulnerabilities.length === 0) {
147
+ lines.push("✅ No authorization vulnerabilities detected.");
148
+ return lines.join("\n");
149
+ }
150
+ // Group by severity
151
+ const severityOrder = ["critical", "high", "medium", "low", "info"];
152
+ const grouped = new Map();
153
+ for (const vuln of result.vulnerabilities) {
154
+ const existing = grouped.get(vuln.severity) || [];
155
+ existing.push(vuln);
156
+ grouped.set(vuln.severity, existing);
157
+ }
158
+ for (const severity of severityOrder) {
159
+ const vulns = grouped.get(severity);
160
+ if (!vulns || vulns.length === 0)
161
+ continue;
162
+ const emoji = {
163
+ critical: "🔴",
164
+ high: "🟠",
165
+ medium: "🟡",
166
+ low: "🔵",
167
+ info: "⚪",
168
+ }[severity];
169
+ lines.push(`## ${emoji} ${severity.toUpperCase()} (${vulns.length})`, "");
170
+ for (const vuln of vulns) {
171
+ lines.push(`### ${vuln.name}`);
172
+ lines.push(`- **Endpoint**: \`${Array.isArray(vuln.method) ? vuln.method.join("/") : vuln.method} ${vuln.endpoint}\``);
173
+ lines.push(`- **File**: ${vuln.file}:${vuln.line}`);
174
+ lines.push(`- **Description**: ${vuln.description}`);
175
+ if (vuln.cweIds.length > 0) {
176
+ lines.push(`- **CWE**: ${vuln.cweIds.join(", ")}`);
177
+ }
178
+ if (vuln.owaspRefs.length > 0) {
179
+ lines.push(`- **OWASP**: ${vuln.owaspRefs.join(", ")}`);
180
+ }
181
+ lines.push(`- **Remediation**: ${vuln.remediation}`);
182
+ lines.push("");
183
+ }
184
+ }
185
+ // Summary by type
186
+ if (Object.keys(result.stats.byVulnType).length > 0) {
187
+ lines.push("## Summary by Vulnerability Type", "");
188
+ lines.push("| Type | Count |");
189
+ lines.push("|------|-------|");
190
+ for (const [type, count] of Object.entries(result.stats.byVulnType)) {
191
+ if (count && count > 0) {
192
+ lines.push(`| ${type} | ${count} |`);
193
+ }
194
+ }
195
+ }
196
+ return lines.join("\n");
197
+ }
198
+ /**
199
+ * Get vulnerability description
200
+ */
201
+ export function getVulnerabilityDescription(vulnType) {
202
+ const descriptions = {
203
+ "bola": "Broken Object Level Authorization occurs when an API does not properly validate that a user has permission to access a specific object.",
204
+ "idor": "Insecure Direct Object Reference allows attackers to access objects directly by manipulating input parameters containing object IDs.",
205
+ "bfla": "Broken Function Level Authorization occurs when users can access administrative or privileged functions without proper permission checks.",
206
+ "mass-assignment": "Mass Assignment allows attackers to modify object properties they shouldn't have access to by manipulating request parameters.",
207
+ "race-condition-auth": "Race Condition in Authorization occurs when concurrent requests can bypass authorization checks.",
208
+ "privilege-escalation": "Privilege Escalation allows users to gain elevated access rights beyond what was intended.",
209
+ "missing-auth": "Missing Authentication occurs when sensitive endpoints do not require user authentication.",
210
+ "missing-authz": "Missing Authorization occurs when authenticated users can perform actions without proper permission checks.",
211
+ "direct-db-access": "Direct Database Access without Authorization allows unvalidated access to data through unprotected database queries.",
212
+ "horizontal-priv-esc": "Horizontal Privilege Escalation allows users to access resources belonging to other users at the same privilege level.",
213
+ "vertical-priv-esc": "Vertical Privilege Escalation allows users to elevate their privileges to a higher access level.",
214
+ };
215
+ const names = {
216
+ "bola": "Broken Object Level Authorization",
217
+ "idor": "Insecure Direct Object Reference",
218
+ "bfla": "Broken Function Level Authorization",
219
+ "mass-assignment": "Mass Assignment",
220
+ "race-condition-auth": "Race Condition in Authorization",
221
+ "privilege-escalation": "Privilege Escalation",
222
+ "missing-auth": "Missing Authentication",
223
+ "missing-authz": "Missing Authorization",
224
+ "direct-db-access": "Direct Database Access",
225
+ "horizontal-priv-esc": "Horizontal Privilege Escalation",
226
+ "vertical-priv-esc": "Vertical Privilege Escalation",
227
+ };
228
+ return {
229
+ name: names[vulnType],
230
+ description: descriptions[vulnType],
231
+ cweIds: LOGIC_VULN_CWE_MAP[vulnType],
232
+ owaspRefs: LOGIC_VULN_OWASP_MAP[vulnType],
233
+ severity: LOGIC_VULN_SEVERITY_MAP[vulnType],
234
+ };
235
+ }
236
+ /**
237
+ * Quick check for common authorization issues
238
+ */
239
+ export async function quickAuthCheck(projectPath) {
240
+ const endpoints = await extractEndpoints(projectPath);
241
+ const analyses = await analyzeEndpoints(endpoints, projectPath);
242
+ let hasAuthMiddleware = false;
243
+ let hasOwnershipChecks = false;
244
+ let hasRoleChecks = false;
245
+ const potentialIssues = [];
246
+ for (const analysis of analyses) {
247
+ if (analysis.requiresAuth)
248
+ hasAuthMiddleware = true;
249
+ for (const check of analysis.authzChecks) {
250
+ if (check.type === "ownership")
251
+ hasOwnershipChecks = true;
252
+ if (check.type === "role" || check.type === "admin")
253
+ hasRoleChecks = true;
254
+ }
255
+ for (const vuln of analysis.vulnerabilities) {
256
+ if (!potentialIssues.includes(vuln.vulnType)) {
257
+ potentialIssues.push(vuln.vulnType);
258
+ }
259
+ }
260
+ }
261
+ return {
262
+ hasAuthMiddleware,
263
+ hasOwnershipChecks,
264
+ hasRoleChecks,
265
+ potentialIssues,
266
+ };
267
+ }
268
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/scanners/logic/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,254 @@
1
+ /**
2
+ * Business Logic Vulnerability Types
3
+ *
4
+ * Types for detecting BOLA, IDOR, BFLA, and other
5
+ * authorization/business logic vulnerabilities.
6
+ *
7
+ * @module scanners/logic/types
8
+ */
9
+ import type { Severity } from "../../certification/types.js";
10
+ import type { DeterministicFinding } from "../types.js";
11
+ /**
12
+ * Business logic vulnerability types
13
+ */
14
+ export type LogicVulnType = "bola" | "idor" | "bfla" | "mass-assignment" | "race-condition-auth" | "privilege-escalation" | "missing-auth" | "missing-authz" | "direct-db-access" | "horizontal-priv-esc" | "vertical-priv-esc";
15
+ /**
16
+ * HTTP methods for API endpoints
17
+ */
18
+ export type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "HEAD" | "OPTIONS";
19
+ /**
20
+ * Web framework types
21
+ */
22
+ export type WebFramework = "nextjs" | "express" | "fastify" | "koa" | "hapi" | "nestjs" | "django" | "flask" | "fastapi" | "rails" | "spring" | "laravel" | "gin" | "echo" | "fiber" | "auto";
23
+ /**
24
+ * Detected API endpoint
25
+ */
26
+ export interface APIEndpoint {
27
+ /** File where the endpoint is defined */
28
+ file: string;
29
+ /** Line number */
30
+ line: number;
31
+ /** HTTP method */
32
+ method: HttpMethod | HttpMethod[];
33
+ /** Route path (e.g., /api/users/:id) */
34
+ path: string;
35
+ /** Function/handler name */
36
+ handler?: string;
37
+ /** Framework that defines this endpoint */
38
+ framework: WebFramework;
39
+ /** Parameters extracted from path */
40
+ pathParams: string[];
41
+ /** Whether authentication middleware is applied */
42
+ hasAuth: boolean;
43
+ /** Authorization checks detected */
44
+ authzChecks: AuthorizationCheck[];
45
+ /** Resource type being accessed (e.g., "user", "order") */
46
+ resourceType?: string;
47
+ /** Whether endpoint accesses database */
48
+ hasDbAccess: boolean;
49
+ /** Database queries in this endpoint */
50
+ dbQueries: DatabaseQuery[];
51
+ }
52
+ /**
53
+ * Authorization check detected in code
54
+ */
55
+ export interface AuthorizationCheck {
56
+ /** Type of check */
57
+ type: "ownership" | "role" | "permission" | "admin" | "custom";
58
+ /** Where the check is performed */
59
+ location: {
60
+ file: string;
61
+ line: number;
62
+ };
63
+ /** Code snippet of the check */
64
+ snippet: string;
65
+ /** Whether check appears to be bypassable */
66
+ potentiallyBypassable: boolean;
67
+ /** Reason for bypass concern */
68
+ bypassReason?: string;
69
+ }
70
+ /**
71
+ * Database query detected in endpoint
72
+ */
73
+ export interface DatabaseQuery {
74
+ /** Query type */
75
+ type: "select" | "insert" | "update" | "delete" | "raw";
76
+ /** Table/collection being accessed */
77
+ table?: string;
78
+ /** Whether query includes ownership filter */
79
+ hasOwnershipFilter: boolean;
80
+ /** Location in code */
81
+ location: {
82
+ file: string;
83
+ line: number;
84
+ };
85
+ /** Code snippet */
86
+ snippet: string;
87
+ }
88
+ /**
89
+ * Resource access pattern
90
+ */
91
+ export interface ResourceAccess {
92
+ /** Resource type (e.g., "user", "order", "file") */
93
+ resource: string;
94
+ /** Operation being performed */
95
+ operation: "read" | "create" | "update" | "delete";
96
+ /** Whether ownership is verified */
97
+ ownershipCheck: boolean;
98
+ /** How the resource ID is obtained */
99
+ idSource: "path" | "query" | "body" | "header" | "session";
100
+ /** File location */
101
+ file: string;
102
+ /** Line number */
103
+ line: number;
104
+ }
105
+ /**
106
+ * Authorization flow analysis result
107
+ */
108
+ export interface AuthorizationAnalysis {
109
+ /** Endpoint being analyzed */
110
+ endpoint: APIEndpoint;
111
+ /** Whether authentication is required */
112
+ requiresAuth: boolean;
113
+ /** Authentication method detected */
114
+ authMethod?: "jwt" | "session" | "api-key" | "oauth" | "basic" | "custom";
115
+ /** Authorization checks found */
116
+ authzChecks: AuthorizationCheck[];
117
+ /** Resources accessed */
118
+ resourceAccesses: ResourceAccess[];
119
+ /** Potential vulnerabilities */
120
+ vulnerabilities: LogicVulnerability[];
121
+ /** Confidence score (0-100) */
122
+ confidence: number;
123
+ }
124
+ /**
125
+ * A business logic vulnerability finding
126
+ */
127
+ export interface LogicVulnerability {
128
+ /** Vulnerability type */
129
+ vulnType: LogicVulnType;
130
+ /** Human-readable name */
131
+ name: string;
132
+ /** Description */
133
+ description: string;
134
+ /** Severity */
135
+ severity: Severity;
136
+ /** Confidence (0-100) */
137
+ confidence: number;
138
+ /** Affected endpoint */
139
+ endpoint: string;
140
+ /** HTTP method */
141
+ method: HttpMethod | HttpMethod[];
142
+ /** File location */
143
+ file: string;
144
+ /** Line number */
145
+ line: number;
146
+ /** Code snippet showing the issue */
147
+ snippet?: string;
148
+ /** Authentication check status */
149
+ authCheck: {
150
+ present: boolean;
151
+ location?: string;
152
+ bypassable: boolean;
153
+ bypassReason?: string;
154
+ };
155
+ /** Resource access details */
156
+ resourceAccess?: ResourceAccess;
157
+ /** CWE IDs */
158
+ cweIds: string[];
159
+ /** OWASP references */
160
+ owaspRefs: string[];
161
+ /** Suggested remediation */
162
+ remediation: string;
163
+ }
164
+ /**
165
+ * Logic finding extends DeterministicFinding with logic-specific fields
166
+ */
167
+ export interface LogicFinding extends DeterministicFinding {
168
+ /** Vulnerability type */
169
+ vulnType: LogicVulnType;
170
+ /** Affected endpoint path */
171
+ affectedEndpoint: string;
172
+ /** HTTP method */
173
+ httpMethod?: HttpMethod | HttpMethod[];
174
+ /** Auth check details */
175
+ authCheck?: {
176
+ present: boolean;
177
+ location?: string;
178
+ bypassable: boolean;
179
+ bypassReason?: string;
180
+ };
181
+ /** Resource access details */
182
+ resourceAccess?: ResourceAccess;
183
+ /** OWASP references */
184
+ owaspRefs?: string[];
185
+ /** Suggested remediation */
186
+ remediation?: string;
187
+ }
188
+ /**
189
+ * Scan options for logic analysis
190
+ */
191
+ export interface LogicScanOptions {
192
+ /** Framework to use (auto-detect if not specified) */
193
+ framework?: WebFramework;
194
+ /** Specific vulnerability types to focus on */
195
+ focusAreas?: LogicVulnType[];
196
+ /** Include LLM-powered semantic analysis */
197
+ includeLLMAnalysis?: boolean;
198
+ /** Maximum files to analyze */
199
+ maxFiles?: number;
200
+ /** File patterns to include */
201
+ include?: string[];
202
+ /** File patterns to exclude */
203
+ exclude?: string[];
204
+ }
205
+ /**
206
+ * Result from logic vulnerability scan
207
+ */
208
+ export interface LogicScanResult {
209
+ /** Project path */
210
+ projectPath: string;
211
+ /** Framework detected */
212
+ framework: WebFramework;
213
+ /** All endpoints found */
214
+ endpoints: APIEndpoint[];
215
+ /** Logic vulnerabilities found */
216
+ vulnerabilities: LogicVulnerability[];
217
+ /** Findings in standard format */
218
+ findings: LogicFinding[];
219
+ /** Scan statistics */
220
+ stats: {
221
+ filesAnalyzed: number;
222
+ endpointsFound: number;
223
+ vulnerabilitiesFound: number;
224
+ bySeverity: Partial<Record<Severity, number>>;
225
+ byVulnType: Partial<Record<LogicVulnType, number>>;
226
+ };
227
+ /** Scan duration */
228
+ duration: number;
229
+ /** Whether scan completed successfully */
230
+ success: boolean;
231
+ /** Error message if failed */
232
+ error?: string;
233
+ }
234
+ /**
235
+ * CWE mappings for logic vulnerabilities
236
+ */
237
+ export declare const LOGIC_VULN_CWE_MAP: Record<LogicVulnType, string[]>;
238
+ /**
239
+ * OWASP references for logic vulnerabilities
240
+ */
241
+ export declare const LOGIC_VULN_OWASP_MAP: Record<LogicVulnType, string[]>;
242
+ /**
243
+ * Default severity for each vulnerability type
244
+ */
245
+ export declare const LOGIC_VULN_SEVERITY_MAP: Record<LogicVulnType, Severity>;
246
+ /**
247
+ * Patterns for detecting framework types
248
+ */
249
+ export declare const FRAMEWORK_DETECTION_PATTERNS: Record<WebFramework, {
250
+ packageNames: string[];
251
+ filePatterns: RegExp[];
252
+ codePatterns: RegExp[];
253
+ }>;
254
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/scanners/logic/types.ts"],"names":[],"mappings":"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"}