@oculum/scanner 1.0.9 → 1.0.11

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 (365) hide show
  1. package/dist/baseline/diff.d.ts +32 -0
  2. package/dist/baseline/diff.d.ts.map +1 -0
  3. package/dist/baseline/diff.js +119 -0
  4. package/dist/baseline/diff.js.map +1 -0
  5. package/dist/baseline/index.d.ts +9 -0
  6. package/dist/baseline/index.d.ts.map +1 -0
  7. package/dist/baseline/index.js +19 -0
  8. package/dist/baseline/index.js.map +1 -0
  9. package/dist/baseline/manager.d.ts +67 -0
  10. package/dist/baseline/manager.d.ts.map +1 -0
  11. package/dist/baseline/manager.js +180 -0
  12. package/dist/baseline/manager.js.map +1 -0
  13. package/dist/baseline/types.d.ts +91 -0
  14. package/dist/baseline/types.d.ts.map +1 -0
  15. package/dist/baseline/types.js +12 -0
  16. package/dist/baseline/types.js.map +1 -0
  17. package/dist/formatters/cli-terminal.d.ts +38 -0
  18. package/dist/formatters/cli-terminal.d.ts.map +1 -1
  19. package/dist/formatters/cli-terminal.js +365 -42
  20. package/dist/formatters/cli-terminal.js.map +1 -1
  21. package/dist/formatters/github-comment.d.ts +1 -1
  22. package/dist/formatters/github-comment.d.ts.map +1 -1
  23. package/dist/formatters/github-comment.js +75 -11
  24. package/dist/formatters/github-comment.js.map +1 -1
  25. package/dist/formatters/index.d.ts +1 -1
  26. package/dist/formatters/index.d.ts.map +1 -1
  27. package/dist/formatters/index.js +4 -1
  28. package/dist/formatters/index.js.map +1 -1
  29. package/dist/index.d.ts +7 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +155 -16
  32. package/dist/index.js.map +1 -1
  33. package/dist/layer1/config-audit.d.ts.map +1 -1
  34. package/dist/layer1/config-audit.js +20 -3
  35. package/dist/layer1/config-audit.js.map +1 -1
  36. package/dist/layer1/config-mcp-audit.d.ts +20 -0
  37. package/dist/layer1/config-mcp-audit.d.ts.map +1 -0
  38. package/dist/layer1/config-mcp-audit.js +239 -0
  39. package/dist/layer1/config-mcp-audit.js.map +1 -0
  40. package/dist/layer1/index.d.ts +1 -0
  41. package/dist/layer1/index.d.ts.map +1 -1
  42. package/dist/layer1/index.js +9 -1
  43. package/dist/layer1/index.js.map +1 -1
  44. package/dist/layer2/ai-agent-tools.d.ts.map +1 -1
  45. package/dist/layer2/ai-agent-tools.js +303 -0
  46. package/dist/layer2/ai-agent-tools.js.map +1 -1
  47. package/dist/layer2/ai-endpoint-protection.d.ts.map +1 -1
  48. package/dist/layer2/ai-endpoint-protection.js +17 -3
  49. package/dist/layer2/ai-endpoint-protection.js.map +1 -1
  50. package/dist/layer2/ai-execution-sinks.d.ts.map +1 -1
  51. package/dist/layer2/ai-execution-sinks.js +462 -12
  52. package/dist/layer2/ai-execution-sinks.js.map +1 -1
  53. package/dist/layer2/ai-fingerprinting.d.ts.map +1 -1
  54. package/dist/layer2/ai-fingerprinting.js +3 -0
  55. package/dist/layer2/ai-fingerprinting.js.map +1 -1
  56. package/dist/layer2/ai-mcp-security.d.ts +17 -0
  57. package/dist/layer2/ai-mcp-security.d.ts.map +1 -0
  58. package/dist/layer2/ai-mcp-security.js +679 -0
  59. package/dist/layer2/ai-mcp-security.js.map +1 -0
  60. package/dist/layer2/ai-package-hallucination.d.ts +19 -0
  61. package/dist/layer2/ai-package-hallucination.d.ts.map +1 -0
  62. package/dist/layer2/ai-package-hallucination.js +696 -0
  63. package/dist/layer2/ai-package-hallucination.js.map +1 -0
  64. package/dist/layer2/ai-prompt-hygiene.d.ts.map +1 -1
  65. package/dist/layer2/ai-prompt-hygiene.js +495 -9
  66. package/dist/layer2/ai-prompt-hygiene.js.map +1 -1
  67. package/dist/layer2/ai-rag-safety.d.ts.map +1 -1
  68. package/dist/layer2/ai-rag-safety.js +372 -1
  69. package/dist/layer2/ai-rag-safety.js.map +1 -1
  70. package/dist/layer2/auth-antipatterns.d.ts.map +1 -1
  71. package/dist/layer2/auth-antipatterns.js +4 -0
  72. package/dist/layer2/auth-antipatterns.js.map +1 -1
  73. package/dist/layer2/byok-patterns.d.ts.map +1 -1
  74. package/dist/layer2/byok-patterns.js +3 -0
  75. package/dist/layer2/byok-patterns.js.map +1 -1
  76. package/dist/layer2/dangerous-functions/child-process.d.ts +16 -0
  77. package/dist/layer2/dangerous-functions/child-process.d.ts.map +1 -0
  78. package/dist/layer2/dangerous-functions/child-process.js +74 -0
  79. package/dist/layer2/dangerous-functions/child-process.js.map +1 -0
  80. package/dist/layer2/dangerous-functions/dom-xss.d.ts +29 -0
  81. package/dist/layer2/dangerous-functions/dom-xss.d.ts.map +1 -0
  82. package/dist/layer2/dangerous-functions/dom-xss.js +179 -0
  83. package/dist/layer2/dangerous-functions/dom-xss.js.map +1 -0
  84. package/dist/layer2/dangerous-functions/index.d.ts +13 -0
  85. package/dist/layer2/dangerous-functions/index.d.ts.map +1 -0
  86. package/dist/layer2/dangerous-functions/index.js +621 -0
  87. package/dist/layer2/dangerous-functions/index.js.map +1 -0
  88. package/dist/layer2/dangerous-functions/json-parse.d.ts +31 -0
  89. package/dist/layer2/dangerous-functions/json-parse.d.ts.map +1 -0
  90. package/dist/layer2/dangerous-functions/json-parse.js +319 -0
  91. package/dist/layer2/dangerous-functions/json-parse.js.map +1 -0
  92. package/dist/layer2/dangerous-functions/math-random.d.ts +61 -0
  93. package/dist/layer2/dangerous-functions/math-random.d.ts.map +1 -0
  94. package/dist/layer2/dangerous-functions/math-random.js +459 -0
  95. package/dist/layer2/dangerous-functions/math-random.js.map +1 -0
  96. package/dist/layer2/dangerous-functions/patterns.d.ts +21 -0
  97. package/dist/layer2/dangerous-functions/patterns.d.ts.map +1 -0
  98. package/dist/layer2/dangerous-functions/patterns.js +161 -0
  99. package/dist/layer2/dangerous-functions/patterns.js.map +1 -0
  100. package/dist/layer2/dangerous-functions/request-validation.d.ts +13 -0
  101. package/dist/layer2/dangerous-functions/request-validation.d.ts.map +1 -0
  102. package/dist/layer2/dangerous-functions/request-validation.js +119 -0
  103. package/dist/layer2/dangerous-functions/request-validation.js.map +1 -0
  104. package/dist/layer2/dangerous-functions/utils/control-flow.d.ts +23 -0
  105. package/dist/layer2/dangerous-functions/utils/control-flow.d.ts.map +1 -0
  106. package/dist/layer2/dangerous-functions/utils/control-flow.js +149 -0
  107. package/dist/layer2/dangerous-functions/utils/control-flow.js.map +1 -0
  108. package/dist/layer2/dangerous-functions/utils/helpers.d.ts +31 -0
  109. package/dist/layer2/dangerous-functions/utils/helpers.d.ts.map +1 -0
  110. package/dist/layer2/dangerous-functions/utils/helpers.js +124 -0
  111. package/dist/layer2/dangerous-functions/utils/helpers.js.map +1 -0
  112. package/dist/layer2/dangerous-functions/utils/index.d.ts +9 -0
  113. package/dist/layer2/dangerous-functions/utils/index.d.ts.map +1 -0
  114. package/dist/layer2/dangerous-functions/utils/index.js +23 -0
  115. package/dist/layer2/dangerous-functions/utils/index.js.map +1 -0
  116. package/dist/layer2/dangerous-functions/utils/schema-validation.d.ts +22 -0
  117. package/dist/layer2/dangerous-functions/utils/schema-validation.d.ts.map +1 -0
  118. package/dist/layer2/dangerous-functions/utils/schema-validation.js +89 -0
  119. package/dist/layer2/dangerous-functions/utils/schema-validation.js.map +1 -0
  120. package/dist/layer2/data-exposure.d.ts.map +1 -1
  121. package/dist/layer2/data-exposure.js +3 -0
  122. package/dist/layer2/data-exposure.js.map +1 -1
  123. package/dist/layer2/framework-checks.d.ts.map +1 -1
  124. package/dist/layer2/framework-checks.js +3 -0
  125. package/dist/layer2/framework-checks.js.map +1 -1
  126. package/dist/layer2/index.d.ts +3 -0
  127. package/dist/layer2/index.d.ts.map +1 -1
  128. package/dist/layer2/index.js +61 -2
  129. package/dist/layer2/index.js.map +1 -1
  130. package/dist/layer2/logic-gates.d.ts.map +1 -1
  131. package/dist/layer2/logic-gates.js +4 -0
  132. package/dist/layer2/logic-gates.js.map +1 -1
  133. package/dist/layer2/model-supply-chain.d.ts +20 -0
  134. package/dist/layer2/model-supply-chain.d.ts.map +1 -0
  135. package/dist/layer2/model-supply-chain.js +376 -0
  136. package/dist/layer2/model-supply-chain.js.map +1 -0
  137. package/dist/layer2/risky-imports.d.ts.map +1 -1
  138. package/dist/layer2/risky-imports.js +4 -0
  139. package/dist/layer2/risky-imports.js.map +1 -1
  140. package/dist/layer2/variables.d.ts.map +1 -1
  141. package/dist/layer2/variables.js +4 -0
  142. package/dist/layer2/variables.js.map +1 -1
  143. package/dist/layer3/anthropic/auto-dismiss.d.ts +24 -0
  144. package/dist/layer3/anthropic/auto-dismiss.d.ts.map +1 -0
  145. package/dist/layer3/anthropic/auto-dismiss.js +188 -0
  146. package/dist/layer3/anthropic/auto-dismiss.js.map +1 -0
  147. package/dist/layer3/anthropic/clients.d.ts +44 -0
  148. package/dist/layer3/anthropic/clients.d.ts.map +1 -0
  149. package/dist/layer3/anthropic/clients.js +81 -0
  150. package/dist/layer3/anthropic/clients.js.map +1 -0
  151. package/dist/layer3/anthropic/index.d.ts +41 -0
  152. package/dist/layer3/anthropic/index.d.ts.map +1 -0
  153. package/dist/layer3/anthropic/index.js +141 -0
  154. package/dist/layer3/anthropic/index.js.map +1 -0
  155. package/dist/layer3/anthropic/prompts/index.d.ts +8 -0
  156. package/dist/layer3/anthropic/prompts/index.d.ts.map +1 -0
  157. package/dist/layer3/anthropic/prompts/index.js +14 -0
  158. package/dist/layer3/anthropic/prompts/index.js.map +1 -0
  159. package/dist/layer3/anthropic/prompts/semantic-analysis.d.ts +15 -0
  160. package/dist/layer3/anthropic/prompts/semantic-analysis.d.ts.map +1 -0
  161. package/dist/layer3/anthropic/prompts/semantic-analysis.js +169 -0
  162. package/dist/layer3/anthropic/prompts/semantic-analysis.js.map +1 -0
  163. package/dist/layer3/anthropic/prompts/validation.d.ts +12 -0
  164. package/dist/layer3/anthropic/prompts/validation.d.ts.map +1 -0
  165. package/dist/layer3/anthropic/prompts/validation.js +421 -0
  166. package/dist/layer3/anthropic/prompts/validation.js.map +1 -0
  167. package/dist/layer3/anthropic/providers/anthropic.d.ts +21 -0
  168. package/dist/layer3/anthropic/providers/anthropic.d.ts.map +1 -0
  169. package/dist/layer3/anthropic/providers/anthropic.js +266 -0
  170. package/dist/layer3/anthropic/providers/anthropic.js.map +1 -0
  171. package/dist/layer3/anthropic/providers/index.d.ts +8 -0
  172. package/dist/layer3/anthropic/providers/index.d.ts.map +1 -0
  173. package/dist/layer3/anthropic/providers/index.js +15 -0
  174. package/dist/layer3/anthropic/providers/index.js.map +1 -0
  175. package/dist/layer3/anthropic/providers/openai.d.ts +18 -0
  176. package/dist/layer3/anthropic/providers/openai.d.ts.map +1 -0
  177. package/dist/layer3/anthropic/providers/openai.js +340 -0
  178. package/dist/layer3/anthropic/providers/openai.js.map +1 -0
  179. package/dist/layer3/anthropic/request-builder.d.ts +20 -0
  180. package/dist/layer3/anthropic/request-builder.d.ts.map +1 -0
  181. package/dist/layer3/anthropic/request-builder.js +134 -0
  182. package/dist/layer3/anthropic/request-builder.js.map +1 -0
  183. package/dist/layer3/anthropic/types.d.ts +88 -0
  184. package/dist/layer3/anthropic/types.d.ts.map +1 -0
  185. package/dist/layer3/anthropic/types.js +38 -0
  186. package/dist/layer3/anthropic/types.js.map +1 -0
  187. package/dist/layer3/anthropic/utils/index.d.ts +9 -0
  188. package/dist/layer3/anthropic/utils/index.d.ts.map +1 -0
  189. package/dist/layer3/anthropic/utils/index.js +24 -0
  190. package/dist/layer3/anthropic/utils/index.js.map +1 -0
  191. package/dist/layer3/anthropic/utils/path-helpers.d.ts +21 -0
  192. package/dist/layer3/anthropic/utils/path-helpers.d.ts.map +1 -0
  193. package/dist/layer3/anthropic/utils/path-helpers.js +69 -0
  194. package/dist/layer3/anthropic/utils/path-helpers.js.map +1 -0
  195. package/dist/layer3/anthropic/utils/response-parser.d.ts +40 -0
  196. package/dist/layer3/anthropic/utils/response-parser.d.ts.map +1 -0
  197. package/dist/layer3/anthropic/utils/response-parser.js +285 -0
  198. package/dist/layer3/anthropic/utils/response-parser.js.map +1 -0
  199. package/dist/layer3/anthropic/utils/retry.d.ts +15 -0
  200. package/dist/layer3/anthropic/utils/retry.d.ts.map +1 -0
  201. package/dist/layer3/anthropic/utils/retry.js +62 -0
  202. package/dist/layer3/anthropic/utils/retry.js.map +1 -0
  203. package/dist/layer3/index.d.ts +1 -0
  204. package/dist/layer3/index.d.ts.map +1 -1
  205. package/dist/layer3/index.js +16 -6
  206. package/dist/layer3/index.js.map +1 -1
  207. package/dist/layer3/osv-check.d.ts +75 -0
  208. package/dist/layer3/osv-check.d.ts.map +1 -0
  209. package/dist/layer3/osv-check.js +308 -0
  210. package/dist/layer3/osv-check.js.map +1 -0
  211. package/dist/rules/framework-fixes.d.ts +48 -0
  212. package/dist/rules/framework-fixes.d.ts.map +1 -0
  213. package/dist/rules/framework-fixes.js +439 -0
  214. package/dist/rules/framework-fixes.js.map +1 -0
  215. package/dist/rules/index.d.ts +8 -0
  216. package/dist/rules/index.d.ts.map +1 -0
  217. package/dist/rules/index.js +18 -0
  218. package/dist/rules/index.js.map +1 -0
  219. package/dist/rules/metadata.d.ts +43 -0
  220. package/dist/rules/metadata.d.ts.map +1 -0
  221. package/dist/rules/metadata.js +734 -0
  222. package/dist/rules/metadata.js.map +1 -0
  223. package/dist/suppression/config-loader.d.ts +74 -0
  224. package/dist/suppression/config-loader.d.ts.map +1 -0
  225. package/dist/suppression/config-loader.js +424 -0
  226. package/dist/suppression/config-loader.js.map +1 -0
  227. package/dist/suppression/hash.d.ts +48 -0
  228. package/dist/suppression/hash.d.ts.map +1 -0
  229. package/dist/suppression/hash.js +88 -0
  230. package/dist/suppression/hash.js.map +1 -0
  231. package/dist/suppression/index.d.ts +11 -0
  232. package/dist/suppression/index.d.ts.map +1 -0
  233. package/dist/suppression/index.js +39 -0
  234. package/dist/suppression/index.js.map +1 -0
  235. package/dist/suppression/inline-parser.d.ts +39 -0
  236. package/dist/suppression/inline-parser.d.ts.map +1 -0
  237. package/dist/suppression/inline-parser.js +218 -0
  238. package/dist/suppression/inline-parser.js.map +1 -0
  239. package/dist/suppression/manager.d.ts +94 -0
  240. package/dist/suppression/manager.d.ts.map +1 -0
  241. package/dist/suppression/manager.js +292 -0
  242. package/dist/suppression/manager.js.map +1 -0
  243. package/dist/suppression/types.d.ts +151 -0
  244. package/dist/suppression/types.d.ts.map +1 -0
  245. package/dist/suppression/types.js +28 -0
  246. package/dist/suppression/types.js.map +1 -0
  247. package/dist/tiers.d.ts +1 -1
  248. package/dist/tiers.d.ts.map +1 -1
  249. package/dist/tiers.js +27 -0
  250. package/dist/tiers.js.map +1 -1
  251. package/dist/types.d.ts +62 -1
  252. package/dist/types.d.ts.map +1 -1
  253. package/dist/types.js.map +1 -1
  254. package/dist/utils/context-helpers.d.ts +4 -0
  255. package/dist/utils/context-helpers.d.ts.map +1 -1
  256. package/dist/utils/context-helpers.js +13 -9
  257. package/dist/utils/context-helpers.js.map +1 -1
  258. package/package.json +4 -2
  259. package/src/__tests__/benchmark/fixtures/layer1/mcp-config-audit.json +31 -0
  260. package/src/__tests__/benchmark/fixtures/layer2/ai-execution-sinks.ts +1489 -82
  261. package/src/__tests__/benchmark/fixtures/layer2/ai-mcp-security.ts +495 -0
  262. package/src/__tests__/benchmark/fixtures/layer2/ai-package-hallucination.ts +255 -0
  263. package/src/__tests__/benchmark/fixtures/layer2/ai-prompt-hygiene.ts +300 -1
  264. package/src/__tests__/benchmark/fixtures/layer2/ai-rag-safety.ts +139 -0
  265. package/src/__tests__/benchmark/fixtures/layer2/byok-patterns.ts +7 -0
  266. package/src/__tests__/benchmark/fixtures/layer2/data-exposure.ts +63 -0
  267. package/src/__tests__/benchmark/fixtures/layer2/excessive-agency.ts +221 -0
  268. package/src/__tests__/benchmark/fixtures/layer2/index.ts +18 -0
  269. package/src/__tests__/benchmark/fixtures/layer2/model-supply-chain.ts +204 -0
  270. package/src/__tests__/benchmark/fixtures/layer2/phase1-enhancements.ts +157 -0
  271. package/src/__tests__/snapshots/__snapshots__/anthropic-validation-refactor.test.ts.snap +758 -0
  272. package/src/__tests__/snapshots/__snapshots__/dangerous-functions-refactor.test.ts.snap +503 -0
  273. package/src/__tests__/snapshots/anthropic-validation-refactor.test.ts +321 -0
  274. package/src/__tests__/snapshots/dangerous-functions-refactor.test.ts +439 -0
  275. package/src/baseline/__tests__/diff.test.ts +261 -0
  276. package/src/baseline/__tests__/manager.test.ts +225 -0
  277. package/src/baseline/diff.ts +135 -0
  278. package/src/baseline/index.ts +29 -0
  279. package/src/baseline/manager.ts +230 -0
  280. package/src/baseline/types.ts +97 -0
  281. package/src/formatters/cli-terminal.ts +444 -41
  282. package/src/formatters/github-comment.ts +79 -11
  283. package/src/formatters/index.ts +4 -0
  284. package/src/index.ts +197 -14
  285. package/src/layer1/config-audit.ts +24 -3
  286. package/src/layer1/config-mcp-audit.ts +276 -0
  287. package/src/layer1/index.ts +16 -6
  288. package/src/layer2/ai-agent-tools.ts +336 -0
  289. package/src/layer2/ai-endpoint-protection.ts +16 -3
  290. package/src/layer2/ai-execution-sinks.ts +516 -12
  291. package/src/layer2/ai-fingerprinting.ts +5 -1
  292. package/src/layer2/ai-mcp-security.ts +730 -0
  293. package/src/layer2/ai-package-hallucination.ts +791 -0
  294. package/src/layer2/ai-prompt-hygiene.ts +547 -9
  295. package/src/layer2/ai-rag-safety.ts +382 -3
  296. package/src/layer2/auth-antipatterns.ts +5 -0
  297. package/src/layer2/byok-patterns.ts +5 -1
  298. package/src/layer2/dangerous-functions/child-process.ts +98 -0
  299. package/src/layer2/dangerous-functions/dom-xss.ts +220 -0
  300. package/src/layer2/dangerous-functions/index.ts +949 -0
  301. package/src/layer2/dangerous-functions/json-parse.ts +385 -0
  302. package/src/layer2/dangerous-functions/math-random.ts +537 -0
  303. package/src/layer2/dangerous-functions/patterns.ts +174 -0
  304. package/src/layer2/dangerous-functions/request-validation.ts +145 -0
  305. package/src/layer2/dangerous-functions/utils/control-flow.ts +162 -0
  306. package/src/layer2/dangerous-functions/utils/helpers.ts +170 -0
  307. package/src/layer2/dangerous-functions/utils/index.ts +25 -0
  308. package/src/layer2/dangerous-functions/utils/schema-validation.ts +91 -0
  309. package/src/layer2/data-exposure.ts +5 -1
  310. package/src/layer2/framework-checks.ts +5 -0
  311. package/src/layer2/index.ts +63 -1
  312. package/src/layer2/logic-gates.ts +5 -0
  313. package/src/layer2/model-supply-chain.ts +456 -0
  314. package/src/layer2/risky-imports.ts +5 -0
  315. package/src/layer2/variables.ts +5 -0
  316. package/src/layer3/__tests__/osv-check.test.ts +384 -0
  317. package/src/layer3/anthropic/auto-dismiss.ts +212 -0
  318. package/src/layer3/anthropic/clients.ts +84 -0
  319. package/src/layer3/anthropic/index.ts +170 -0
  320. package/src/layer3/anthropic/prompts/index.ts +14 -0
  321. package/src/layer3/anthropic/prompts/semantic-analysis.ts +173 -0
  322. package/src/layer3/anthropic/prompts/validation.ts +419 -0
  323. package/src/layer3/anthropic/providers/anthropic.ts +310 -0
  324. package/src/layer3/anthropic/providers/index.ts +8 -0
  325. package/src/layer3/anthropic/providers/openai.ts +384 -0
  326. package/src/layer3/anthropic/request-builder.ts +150 -0
  327. package/src/layer3/anthropic/types.ts +148 -0
  328. package/src/layer3/anthropic/utils/index.ts +26 -0
  329. package/src/layer3/anthropic/utils/path-helpers.ts +68 -0
  330. package/src/layer3/anthropic/utils/response-parser.ts +322 -0
  331. package/src/layer3/anthropic/utils/retry.ts +75 -0
  332. package/src/layer3/index.ts +18 -5
  333. package/src/layer3/osv-check.ts +420 -0
  334. package/src/rules/__tests__/framework-fixes.test.ts +689 -0
  335. package/src/rules/__tests__/metadata.test.ts +218 -0
  336. package/src/rules/framework-fixes.ts +470 -0
  337. package/src/rules/index.ts +21 -0
  338. package/src/rules/metadata.ts +831 -0
  339. package/src/suppression/__tests__/config-loader.test.ts +382 -0
  340. package/src/suppression/__tests__/hash.test.ts +166 -0
  341. package/src/suppression/__tests__/inline-parser.test.ts +212 -0
  342. package/src/suppression/__tests__/manager.test.ts +415 -0
  343. package/src/suppression/config-loader.ts +462 -0
  344. package/src/suppression/hash.ts +95 -0
  345. package/src/suppression/index.ts +51 -0
  346. package/src/suppression/inline-parser.ts +273 -0
  347. package/src/suppression/manager.ts +379 -0
  348. package/src/suppression/types.ts +174 -0
  349. package/src/tiers.ts +36 -0
  350. package/src/types.ts +90 -0
  351. package/src/utils/context-helpers.ts +13 -9
  352. package/dist/layer2/dangerous-functions.d.ts +0 -7
  353. package/dist/layer2/dangerous-functions.d.ts.map +0 -1
  354. package/dist/layer2/dangerous-functions.js +0 -1701
  355. package/dist/layer2/dangerous-functions.js.map +0 -1
  356. package/dist/layer3/anthropic.d.ts +0 -87
  357. package/dist/layer3/anthropic.d.ts.map +0 -1
  358. package/dist/layer3/anthropic.js +0 -1948
  359. package/dist/layer3/anthropic.js.map +0 -1
  360. package/dist/layer3/openai.d.ts +0 -25
  361. package/dist/layer3/openai.d.ts.map +0 -1
  362. package/dist/layer3/openai.js +0 -238
  363. package/dist/layer3/openai.js.map +0 -1
  364. package/src/layer2/dangerous-functions.ts +0 -1940
  365. package/src/layer3/anthropic.ts +0 -2257
@@ -4,10 +4,11 @@
4
4
  * Deep security analysis using Claude AI and package verification
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.checkPackages = exports.batchAnalyzeWithAI = exports.analyzeWithAI = void 0;
7
+ exports.checkPackageAdvisories = exports.checkPackages = exports.batchAnalyzeWithAI = exports.analyzeWithAI = void 0;
8
8
  exports.runLayer3Scan = runLayer3Scan;
9
9
  const anthropic_1 = require("./anthropic");
10
10
  const package_check_1 = require("./package-check");
11
+ const osv_check_1 = require("./osv-check");
11
12
  // File extensions that benefit most from AI analysis
12
13
  const AI_PRIORITY_EXTENSIONS = [
13
14
  '.ts', '.tsx', '.js', '.jsx', '.mjs',
@@ -32,14 +33,21 @@ async function runLayer3Scan(files, options = {}) {
32
33
  aiAnalyzed: 0,
33
34
  };
34
35
  }
35
- // 1. Check packages (always run, fast)
36
- const packageFiles = files.filter(f => f.path.endsWith('package.json'));
37
- for (const file of packageFiles) {
36
+ // 1. Check packages for hallucination/risk (package.json and requirements.txt)
37
+ const packageManifests = files.filter(f => f.path.endsWith('package.json') ||
38
+ f.path.endsWith('requirements.txt'));
39
+ for (const file of packageManifests) {
38
40
  // Check for cancellation in package loop
39
41
  if (options.cancellationToken?.cancelled)
40
42
  break;
41
- const packageFindings = await (0, package_check_1.checkPackages)(file.content, file.path);
42
- vulnerabilities.push(...packageFindings);
43
+ // Run hallucination/risk check (package-check only handles package.json)
44
+ if (file.path.endsWith('package.json')) {
45
+ const packageFindings = await (0, package_check_1.checkPackages)(file.content, file.path);
46
+ vulnerabilities.push(...packageFindings);
47
+ }
48
+ // Run OSV advisory check (handles both npm and Python)
49
+ const osvFindings = await (0, osv_check_1.checkPackageAdvisories)(file.content, file.path);
50
+ vulnerabilities.push(...osvFindings);
43
51
  }
44
52
  // Check for cancellation before AI analysis
45
53
  if (options.cancellationToken?.cancelled) {
@@ -137,4 +145,6 @@ Object.defineProperty(exports, "analyzeWithAI", { enumerable: true, get: functio
137
145
  Object.defineProperty(exports, "batchAnalyzeWithAI", { enumerable: true, get: function () { return anthropic_2.batchAnalyzeWithAI; } });
138
146
  var package_check_2 = require("./package-check");
139
147
  Object.defineProperty(exports, "checkPackages", { enumerable: true, get: function () { return package_check_2.checkPackages; } });
148
+ var osv_check_2 = require("./osv-check");
149
+ Object.defineProperty(exports, "checkPackageAdvisories", { enumerable: true, get: function () { return osv_check_2.checkPackageAdvisories; } });
140
150
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/layer3/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/layer3/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Layer 3: OSV/Security Advisory Integration
3
+ * Checks packages against OSV.dev for known vulnerabilities
4
+ *
5
+ * Features:
6
+ * - Queries OSV.dev API for known malicious/vulnerable packages
7
+ * - Caches advisories for efficiency
8
+ * - Supports npm and PyPI ecosystems
9
+ */
10
+ import type { Vulnerability, VulnerabilitySeverity } from '../types';
11
+ interface OSVVulnerability {
12
+ id: string;
13
+ summary?: string;
14
+ details?: string;
15
+ severity?: Array<{
16
+ type: string;
17
+ score: string;
18
+ }>;
19
+ references?: Array<{
20
+ type: string;
21
+ url: string;
22
+ }>;
23
+ affected?: Array<{
24
+ package: {
25
+ name: string;
26
+ ecosystem: string;
27
+ };
28
+ ranges?: Array<{
29
+ type: string;
30
+ events: Array<{
31
+ introduced?: string;
32
+ fixed?: string;
33
+ }>;
34
+ }>;
35
+ }>;
36
+ database_specific?: {
37
+ malicious?: boolean;
38
+ severity?: string;
39
+ };
40
+ }
41
+ interface CachedAdvisory {
42
+ timestamp: number;
43
+ advisories: OSVVulnerability[];
44
+ }
45
+ declare const advisoryCache: Map<string, CachedAdvisory>;
46
+ /**
47
+ * Get cache key for a package
48
+ */
49
+ declare function getCacheKey(name: string, ecosystem: string): string;
50
+ /**
51
+ * Query OSV.dev for vulnerabilities affecting a single package
52
+ */
53
+ declare function queryOSV(packageName: string, ecosystem: 'npm' | 'PyPI', version?: string): Promise<OSVVulnerability[]>;
54
+ /**
55
+ * Query OSV.dev for multiple packages in batch
56
+ */
57
+ declare function queryOSVBatch(packages: Array<{
58
+ name: string;
59
+ ecosystem: 'npm' | 'PyPI';
60
+ version?: string;
61
+ }>): Promise<Map<string, OSVVulnerability[]>>;
62
+ /**
63
+ * Determine severity from OSV vulnerability
64
+ */
65
+ declare function mapOSVSeverity(vuln: OSVVulnerability): VulnerabilitySeverity;
66
+ /**
67
+ * Check if vulnerability is for a malicious package
68
+ */
69
+ declare function isMaliciousPackage(vuln: OSVVulnerability): boolean;
70
+ /**
71
+ * Check packages in a file for known vulnerabilities via OSV.dev
72
+ */
73
+ export declare function checkPackageAdvisories(content: string, filePath: string): Promise<Vulnerability[]>;
74
+ export { queryOSV, queryOSVBatch, mapOSVSeverity, isMaliciousPackage, getCacheKey, advisoryCache, };
75
+ //# sourceMappingURL=osv-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"osv-check.d.ts","sourceRoot":"","sources":["../../src/layer3/osv-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAmCpE,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;KACd,CAAC,CAAA;IACF,UAAU,CAAC,EAAE,KAAK,CAAC;QACjB,IAAI,EAAE,MAAM,CAAA;QACZ,GAAG,EAAE,MAAM,CAAA;KACZ,CAAC,CAAA;IACF,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,OAAO,EAAE;YACP,IAAI,EAAE,MAAM,CAAA;YACZ,SAAS,EAAE,MAAM,CAAA;SAClB,CAAA;QACD,MAAM,CAAC,EAAE,KAAK,CAAC;YACb,IAAI,EAAE,MAAM,CAAA;YACZ,MAAM,EAAE,KAAK,CAAC;gBAAE,UAAU,CAAC,EAAE,MAAM,CAAC;gBAAC,KAAK,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SACvD,CAAC,CAAA;KACH,CAAC,CAAA;IACF,iBAAiB,CAAC,EAAE;QAClB,SAAS,CAAC,EAAE,OAAO,CAAA;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;CACF;AAUD,UAAU,cAAc;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,gBAAgB,EAAE,CAAA;CAC/B;AAMD,QAAA,MAAM,aAAa,6BAAoC,CAAA;AAEvD;;GAEG;AACH,iBAAS,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE5D;AAoCD;;GAEG;AACH,iBAAe,QAAQ,CACrB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,KAAK,GAAG,MAAM,EACzB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA4C7B;AAED;;GAEG;AACH,iBAAe,aAAa,CAC1B,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC7E,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAgE1C;AAMD;;GAEG;AACH,iBAAS,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,qBAAqB,CA2BrE;AAED;;GAEG;AACH,iBAAS,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAI3D;AAMD;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,EAAE,CAAC,CAiG1B;AAGD,OAAO,EACL,QAAQ,EACR,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,aAAa,GACd,CAAA"}
@@ -0,0 +1,308 @@
1
+ "use strict";
2
+ /**
3
+ * Layer 3: OSV/Security Advisory Integration
4
+ * Checks packages against OSV.dev for known vulnerabilities
5
+ *
6
+ * Features:
7
+ * - Queries OSV.dev API for known malicious/vulnerable packages
8
+ * - Caches advisories for efficiency
9
+ * - Supports npm and PyPI ecosystems
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.advisoryCache = void 0;
13
+ exports.checkPackageAdvisories = checkPackageAdvisories;
14
+ exports.queryOSV = queryOSV;
15
+ exports.queryOSVBatch = queryOSVBatch;
16
+ exports.mapOSVSeverity = mapOSVSeverity;
17
+ exports.isMaliciousPackage = isMaliciousPackage;
18
+ exports.getCacheKey = getCacheKey;
19
+ const registry_clients_1 = require("../utils/registry-clients");
20
+ // ============================================================================
21
+ // Configuration
22
+ // ============================================================================
23
+ // OSV API endpoint
24
+ const OSV_API_URL = 'https://api.osv.dev/v1/query';
25
+ const OSV_BATCH_URL = 'https://api.osv.dev/v1/querybatch';
26
+ // Cache TTL (24 hours)
27
+ const CACHE_TTL_MS = 24 * 60 * 60 * 1000;
28
+ // Maximum packages to check per scan (cost/time control)
29
+ const MAX_PACKAGES_TO_CHECK = 100;
30
+ // ============================================================================
31
+ // Advisory Cache
32
+ // ============================================================================
33
+ const advisoryCache = new Map();
34
+ exports.advisoryCache = advisoryCache;
35
+ /**
36
+ * Get cache key for a package
37
+ */
38
+ function getCacheKey(name, ecosystem) {
39
+ return `${ecosystem}:${name.toLowerCase()}`;
40
+ }
41
+ /**
42
+ * Check if cached advisory is still valid
43
+ */
44
+ function isCacheValid(cached) {
45
+ return Date.now() - cached.timestamp < CACHE_TTL_MS;
46
+ }
47
+ /**
48
+ * Get cached advisories for a package
49
+ */
50
+ function getCachedAdvisories(name, ecosystem) {
51
+ const key = getCacheKey(name, ecosystem);
52
+ const cached = advisoryCache.get(key);
53
+ if (cached && isCacheValid(cached)) {
54
+ return cached.advisories;
55
+ }
56
+ return null;
57
+ }
58
+ /**
59
+ * Cache advisories for a package
60
+ */
61
+ function cacheAdvisories(name, ecosystem, advisories) {
62
+ const key = getCacheKey(name, ecosystem);
63
+ advisoryCache.set(key, {
64
+ timestamp: Date.now(),
65
+ advisories,
66
+ });
67
+ }
68
+ // ============================================================================
69
+ // OSV API Client
70
+ // ============================================================================
71
+ /**
72
+ * Query OSV.dev for vulnerabilities affecting a single package
73
+ */
74
+ async function queryOSV(packageName, ecosystem, version) {
75
+ // Check cache first
76
+ const cached = getCachedAdvisories(packageName, ecosystem);
77
+ if (cached !== null) {
78
+ return cached;
79
+ }
80
+ try {
81
+ const query = {
82
+ package: {
83
+ name: packageName,
84
+ ecosystem,
85
+ },
86
+ };
87
+ if (version) {
88
+ query.version = version;
89
+ }
90
+ const response = await fetch(OSV_API_URL, {
91
+ method: 'POST',
92
+ headers: {
93
+ 'Content-Type': 'application/json',
94
+ },
95
+ body: JSON.stringify(query),
96
+ });
97
+ if (!response.ok) {
98
+ // Don't throw - gracefully degrade
99
+ cacheAdvisories(packageName, ecosystem, []);
100
+ return [];
101
+ }
102
+ const data = (await response.json());
103
+ const advisories = data.vulns || [];
104
+ // Cache the result
105
+ cacheAdvisories(packageName, ecosystem, advisories);
106
+ return advisories;
107
+ }
108
+ catch {
109
+ // Network error - gracefully degrade
110
+ return [];
111
+ }
112
+ }
113
+ /**
114
+ * Query OSV.dev for multiple packages in batch
115
+ */
116
+ async function queryOSVBatch(packages) {
117
+ const results = new Map();
118
+ // Split into cached and uncached
119
+ const uncached = [];
120
+ for (let i = 0; i < packages.length; i++) {
121
+ const pkg = packages[i];
122
+ const cached = getCachedAdvisories(pkg.name, pkg.ecosystem);
123
+ if (cached !== null) {
124
+ results.set(getCacheKey(pkg.name, pkg.ecosystem), cached);
125
+ }
126
+ else {
127
+ uncached.push({ ...pkg, index: i });
128
+ }
129
+ }
130
+ if (uncached.length === 0) {
131
+ return results;
132
+ }
133
+ try {
134
+ const queries = uncached.map(pkg => ({
135
+ package: {
136
+ name: pkg.name,
137
+ ecosystem: pkg.ecosystem,
138
+ },
139
+ version: pkg.version,
140
+ }));
141
+ const response = await fetch(OSV_BATCH_URL, {
142
+ method: 'POST',
143
+ headers: {
144
+ 'Content-Type': 'application/json',
145
+ },
146
+ body: JSON.stringify({ queries }),
147
+ });
148
+ if (!response.ok) {
149
+ // Gracefully degrade - return empty for all uncached
150
+ for (const pkg of uncached) {
151
+ cacheAdvisories(pkg.name, pkg.ecosystem, []);
152
+ results.set(getCacheKey(pkg.name, pkg.ecosystem), []);
153
+ }
154
+ return results;
155
+ }
156
+ const data = (await response.json());
157
+ // Process batch results
158
+ for (let i = 0; i < uncached.length; i++) {
159
+ const pkg = uncached[i];
160
+ const advisories = data.results[i]?.vulns || [];
161
+ cacheAdvisories(pkg.name, pkg.ecosystem, advisories);
162
+ results.set(getCacheKey(pkg.name, pkg.ecosystem), advisories);
163
+ }
164
+ return results;
165
+ }
166
+ catch {
167
+ // Network error - gracefully degrade
168
+ for (const pkg of uncached) {
169
+ results.set(getCacheKey(pkg.name, pkg.ecosystem), []);
170
+ }
171
+ return results;
172
+ }
173
+ }
174
+ // ============================================================================
175
+ // Severity Mapping
176
+ // ============================================================================
177
+ /**
178
+ * Determine severity from OSV vulnerability
179
+ */
180
+ function mapOSVSeverity(vuln) {
181
+ // Check for malicious package (critical)
182
+ if (vuln.database_specific?.malicious) {
183
+ return 'critical';
184
+ }
185
+ // Check CVSS score
186
+ const cvss = vuln.severity?.find(s => s.type === 'CVSS_V3');
187
+ if (cvss) {
188
+ const score = parseFloat(cvss.score);
189
+ if (score >= 9.0)
190
+ return 'critical';
191
+ if (score >= 7.0)
192
+ return 'high';
193
+ if (score >= 4.0)
194
+ return 'medium';
195
+ return 'low';
196
+ }
197
+ // Check database_specific severity
198
+ const dbSeverity = vuln.database_specific?.severity?.toLowerCase();
199
+ if (dbSeverity) {
200
+ if (dbSeverity === 'critical')
201
+ return 'critical';
202
+ if (dbSeverity === 'high')
203
+ return 'high';
204
+ if (dbSeverity === 'moderate' || dbSeverity === 'medium')
205
+ return 'medium';
206
+ if (dbSeverity === 'low')
207
+ return 'low';
208
+ }
209
+ // Default to high for unknown severity (conservative)
210
+ return 'high';
211
+ }
212
+ /**
213
+ * Check if vulnerability is for a malicious package
214
+ */
215
+ function isMaliciousPackage(vuln) {
216
+ return vuln.database_specific?.malicious === true ||
217
+ vuln.id.startsWith('MAL-') ||
218
+ (vuln.summary?.toLowerCase().includes('malicious') ?? false);
219
+ }
220
+ // ============================================================================
221
+ // Main Check Function
222
+ // ============================================================================
223
+ /**
224
+ * Check packages in a file for known vulnerabilities via OSV.dev
225
+ */
226
+ async function checkPackageAdvisories(content, filePath) {
227
+ const vulnerabilities = [];
228
+ // Determine file type
229
+ const fileType = (0, registry_clients_1.getPackageFileType)(filePath);
230
+ if (!fileType) {
231
+ return vulnerabilities;
232
+ }
233
+ // Extract dependencies based on file type
234
+ let dependencies = [];
235
+ if (fileType === 'npm' && filePath.endsWith('package.json')) {
236
+ dependencies = (0, registry_clients_1.extractNpmDependencies)(content);
237
+ }
238
+ else if (fileType === 'python') {
239
+ dependencies = (0, registry_clients_1.extractPythonRequirements)(content);
240
+ }
241
+ if (dependencies.length === 0) {
242
+ return vulnerabilities;
243
+ }
244
+ const lines = content.split('\n');
245
+ const ecosystem = fileType === 'npm' ? 'npm' : 'PyPI';
246
+ // Limit packages to check
247
+ const limitedDeps = dependencies.slice(0, MAX_PACKAGES_TO_CHECK);
248
+ // Query OSV in batch for efficiency
249
+ const packagesToQuery = limitedDeps.map(dep => ({
250
+ name: dep.name,
251
+ ecosystem: ecosystem,
252
+ version: dep.version,
253
+ }));
254
+ const advisoriesMap = await queryOSVBatch(packagesToQuery);
255
+ // Process results
256
+ for (const dep of limitedDeps) {
257
+ const key = getCacheKey(dep.name, ecosystem);
258
+ const advisories = advisoriesMap.get(key) || [];
259
+ if (advisories.length === 0)
260
+ continue;
261
+ // Find the most severe vulnerability
262
+ let mostSevere = null;
263
+ let highestSeverity = 'info';
264
+ const severityOrder = ['info', 'low', 'medium', 'high', 'critical'];
265
+ for (const adv of advisories) {
266
+ const sev = mapOSVSeverity(adv);
267
+ if (severityOrder.indexOf(sev) > severityOrder.indexOf(highestSeverity)) {
268
+ highestSeverity = sev;
269
+ mostSevere = adv;
270
+ }
271
+ }
272
+ if (!mostSevere)
273
+ continue;
274
+ // Determine category based on malicious vs vulnerable
275
+ const isMalicious = advisories.some(a => isMaliciousPackage(a));
276
+ const category = isMalicious ? 'ai_package_malicious' : 'suspicious_package';
277
+ // Build description
278
+ const advIds = advisories.map(a => a.id).slice(0, 3).join(', ');
279
+ const moreCount = advisories.length > 3 ? ` +${advisories.length - 3} more` : '';
280
+ const description = isMalicious
281
+ ? `Package "${dep.name}" is flagged as MALICIOUS in OSV.dev (${advIds}${moreCount}). This package may contain malware or data exfiltration code.`
282
+ : `Package "${dep.name}" has ${advisories.length} known security advisories (${advIds}${moreCount}). ${mostSevere.summary || 'Review before use.'}`;
283
+ // Build suggested fix
284
+ const suggestedFix = isMalicious
285
+ ? `Remove "${dep.name}" immediately. Do not use this package.`
286
+ : `Update "${dep.name}" to a patched version or find an alternative. Check: https://osv.dev/list?ecosystem=${ecosystem}&q=${encodeURIComponent(dep.name)}`;
287
+ vulnerabilities.push({
288
+ id: `osv-${filePath}-${dep.name}`,
289
+ filePath,
290
+ lineNumber: dep.line,
291
+ lineContent: lines[dep.line - 1]?.trim() || dep.name,
292
+ severity: highestSeverity,
293
+ category,
294
+ title: isMalicious
295
+ ? `Malicious package: ${dep.name}`
296
+ : `Vulnerable package: ${dep.name} (${advisories.length} advisories)`,
297
+ description,
298
+ suggestedFix,
299
+ confidence: 'high',
300
+ layer: 3,
301
+ requiresAIValidation: false, // OSV data is authoritative
302
+ });
303
+ // Rate limit between individual package queries if not using batch
304
+ await (0, registry_clients_1.rateLimitDelay)();
305
+ }
306
+ return vulnerabilities;
307
+ }
308
+ //# sourceMappingURL=osv-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"osv-check.js","sourceRoot":"","sources":["../../src/layer3/osv-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Framework-Aware Fix Suggestions Registry (PRO-83)
3
+ *
4
+ * Provides framework-specific fix suggestions that transform generic advice
5
+ * into actionable guidance based on the user's detected tech stack.
6
+ *
7
+ * When a Next.js + Prisma project has a SQL injection finding, this registry
8
+ * provides Prisma-specific fixes instead of generic SQL advice.
9
+ *
10
+ * Falls back gracefully to generic fixes (from metadata.ts) when no match.
11
+ */
12
+ import type { VulnerabilityCategory } from '../types';
13
+ import type { FrameworkContext, DataAccessContext } from '../utils/project-context-builder';
14
+ export type FrameworkKey = 'nextjs' | 'express' | 'fastify' | 'nestjs' | 'prisma' | 'drizzle' | 'supabase' | 'mongoose' | 'knex' | 'react' | 'vue';
15
+ export interface FrameworkFix {
16
+ /** Step-by-step fix instructions specific to this framework */
17
+ fixSteps: string[];
18
+ /** Optional code example demonstrating the fix */
19
+ codeExample?: string;
20
+ }
21
+ /**
22
+ * Registry mapping vulnerability categories to framework-specific fixes.
23
+ *
24
+ * Structure: category -> framework -> fix
25
+ *
26
+ * Priority categories (Tier 1):
27
+ * - sql_injection: Fixes vary dramatically by ORM
28
+ * - missing_auth: Framework-specific middleware patterns
29
+ * - xss: React/Vue/vanilla have different approaches
30
+ * - hardcoded_secret: Framework-specific env handling
31
+ * - cors_misconfiguration: Very framework-specific
32
+ */
33
+ export declare const FRAMEWORK_FIX_REGISTRY: Partial<Record<VulnerabilityCategory, Partial<Record<FrameworkKey, FrameworkFix>>>>;
34
+ /**
35
+ * Get framework-specific fix for a vulnerability category.
36
+ *
37
+ * Priority order for ORM-related categories (sql_injection):
38
+ * 1. ORM (prisma, drizzle, supabase, mongoose, knex)
39
+ * 2. Backend framework (nextjs, express, fastify, nestjs)
40
+ *
41
+ * Priority order for other categories:
42
+ * 1. Frontend framework for XSS (react, vue)
43
+ * 2. Backend framework for auth/cors/secrets
44
+ *
45
+ * @returns FrameworkFix if a match is found, undefined otherwise (falls back to generic)
46
+ */
47
+ export declare function getFrameworkFix(category: VulnerabilityCategory, frameworks: FrameworkContext, dataAccess?: DataAccessContext): FrameworkFix | undefined;
48
+ //# sourceMappingURL=framework-fixes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework-fixes.d.ts","sourceRoot":"","sources":["../../src/rules/framework-fixes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AAM3F,MAAM,MAAM,YAAY,GACpB,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAC3C,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GACvD,OAAO,GAAG,KAAK,CAAA;AAEnB,MAAM,WAAW,YAAY;IAC3B,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAMD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,sBAAsB,EAAE,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CA+WtH,CAAA;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,qBAAqB,EAC/B,UAAU,EAAE,gBAAgB,EAC5B,UAAU,CAAC,EAAE,iBAAiB,GAC7B,YAAY,GAAG,SAAS,CAgC1B"}