@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
@@ -0,0 +1,503 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Refactor Safety - dangerous-functions.ts Deserialization detection should detect pickle.loads (Python) 1`] = `
4
+ Array [
5
+ Object {
6
+ "category": "dangerous_function",
7
+ "confidence": "high",
8
+ "description": "Unsafe deserialization can lead to remote code execution",
9
+ "filePath": "handler.py",
10
+ "id": "dangerous-func-handler.py-2-Unsafe deserialization",
11
+ "layer": 2,
12
+ "lineContent": "data = pickle.loads(user_data)",
13
+ "lineNumber": 2,
14
+ "severity": "critical",
15
+ "suggestedFix": "Use safe loaders (yaml.safe_load) or validate input before deserializing",
16
+ "title": "Unsafe deserialization",
17
+ },
18
+ ]
19
+ `;
20
+
21
+ exports[`Refactor Safety - dangerous-functions.ts Deserialization detection should detect yaml.load without safe loader 1`] = `Array []`;
22
+
23
+ exports[`Refactor Safety - dangerous-functions.ts File path detection should detect dynamic file path in API handlers 1`] = `
24
+ Array [
25
+ Object {
26
+ "category": "dangerous_function",
27
+ "confidence": "high",
28
+ "description": "Dynamic file paths can lead to path traversal attacks",
29
+ "filePath": "src/api/files.ts",
30
+ "id": "dangerous-func-src/api/files.ts-2-Dynamic file path",
31
+ "layer": 2,
32
+ "lineContent": "const file = fs.readFileSync(req.params.filename);",
33
+ "lineNumber": 2,
34
+ "severity": "medium",
35
+ "suggestedFix": "Validate and sanitize file paths, use path.resolve with a base directory",
36
+ "title": "Dynamic file path",
37
+ },
38
+ ]
39
+ `;
40
+
41
+ exports[`Refactor Safety - dangerous-functions.ts File path detection should detect path traversal risk 1`] = `
42
+ Array [
43
+ Object {
44
+ "category": "dangerous_function",
45
+ "confidence": "high",
46
+ "description": "User input in file paths can lead to path traversal attacks",
47
+ "filePath": "src/api/upload.ts",
48
+ "id": "dangerous-func-src/api/upload.ts-2-Path traversal risk",
49
+ "layer": 2,
50
+ "lineContent": "const fullPath = path.join(uploadDir, req.query.path);",
51
+ "lineNumber": 2,
52
+ "severity": "high",
53
+ "suggestedFix": "Validate paths and ensure they stay within allowed directories",
54
+ "title": "Path traversal risk",
55
+ },
56
+ ]
57
+ `;
58
+
59
+ exports[`Refactor Safety - dangerous-functions.ts File path detection should detect path traversal with sanitization as lower severity 1`] = `
60
+ Array [
61
+ Object {
62
+ "category": "dangerous_function",
63
+ "confidence": "low",
64
+ "description": "Dynamic file path with path traversal protection detected. Verify the protection is complete and covers all attack vectors.",
65
+ "filePath": "src/api/files.ts",
66
+ "id": "dangerous-func-src/api/files.ts-5-Dynamic file path",
67
+ "layer": 2,
68
+ "lineContent": "fs.readFileSync(fullPath);",
69
+ "lineNumber": 5,
70
+ "severity": "info",
71
+ "suggestedFix": "Ensure path normalization and base directory checks are applied consistently.",
72
+ "title": "Dynamic file path (protected)",
73
+ },
74
+ ]
75
+ `;
76
+
77
+ exports[`Refactor Safety - dangerous-functions.ts File path detection should skip dynamic paths in CLI tools 1`] = `
78
+ Array [
79
+ Object {
80
+ "category": "dangerous_function",
81
+ "confidence": "low",
82
+ "description": "Dynamic file path in CLI tool. CLI tools typically have trusted operators, but consider adding path validation if user input is involved.",
83
+ "filePath": "src/cli/scan.ts",
84
+ "id": "dangerous-func-src/cli/scan.ts-2-Dynamic file path",
85
+ "layer": 2,
86
+ "lineContent": "const content = fs.readFileSync(filePath);",
87
+ "lineNumber": 2,
88
+ "severity": "info",
89
+ "suggestedFix": "Add path validation if accepting paths from untrusted sources.",
90
+ "title": "Dynamic file path (CLI tool)",
91
+ },
92
+ ]
93
+ `;
94
+
95
+ exports[`Refactor Safety - dangerous-functions.ts JSON.parse detection should detect JSON.parse on localStorage 1`] = `Array []`;
96
+
97
+ exports[`Refactor Safety - dangerous-functions.ts JSON.parse detection should detect JSON.parse on user input 1`] = `Array []`;
98
+
99
+ exports[`Refactor Safety - dangerous-functions.ts JSON.parse detection should detect JSON.parse with schema validation as handled 1`] = `Array []`;
100
+
101
+ exports[`Refactor Safety - dangerous-functions.ts JSON.parse detection should skip JSON.parse in test files 1`] = `Array []`;
102
+
103
+ exports[`Refactor Safety - dangerous-functions.ts JSON.parse detection should skip trusted SDK response parsing 1`] = `Array []`;
104
+
105
+ exports[`Refactor Safety - dangerous-functions.ts JSON.parse detection should suppress JSON.parse with try-catch on internal data 1`] = `Array []`;
106
+
107
+ exports[`Refactor Safety - dangerous-functions.ts LLM prompt context detection should detect LLM prompt injection risk instead of XSS 1`] = `Array []`;
108
+
109
+ exports[`Refactor Safety - dangerous-functions.ts Math.random detection should classify Math.random for UI IDs as info 1`] = `
110
+ Array [
111
+ Object {
112
+ "category": "dangerous_function",
113
+ "confidence": "low",
114
+ "description": "Math.random() generating short UI identifier (7-char string). Acceptable for React keys, temp IDs.",
115
+ "filePath": "src/components/list.tsx",
116
+ "id": "dangerous-func-src/components/list.tsx-2-Math.random for security",
117
+ "layer": 2,
118
+ "lineContent": "const key = Math.random().toString(36).substring(2, 9);",
119
+ "lineNumber": 2,
120
+ "severity": "info",
121
+ "suggestedFix": "For security tokens, use crypto.randomBytes(). For unique IDs, crypto.randomUUID().",
122
+ "title": "Math.random() in UI identifier generation (7-char string)",
123
+ },
124
+ ]
125
+ `;
126
+
127
+ exports[`Refactor Safety - dangerous-functions.ts Math.random detection should classify business IDs as low severity 1`] = `
128
+ Array [
129
+ Object {
130
+ "category": "dangerous_function",
131
+ "confidence": "low",
132
+ "description": "Math.random() generating business identifier (variable: orderId). Verify this is not used for security purposes.",
133
+ "filePath": "src/orders.ts",
134
+ "id": "dangerous-func-src/orders.ts-2-Math.random for security",
135
+ "layer": 2,
136
+ "lineContent": "const orderId = 'ORD-' + Math.random().toString(36).substring(2, 12);",
137
+ "lineNumber": 2,
138
+ "severity": "low",
139
+ "suggestedFix": "For business IDs, crypto.randomUUID() is preferred. For security tokens, use crypto.randomBytes().",
140
+ "title": "Math.random() in non-security usage (variable: orderId)",
141
+ },
142
+ ]
143
+ `;
144
+
145
+ exports[`Refactor Safety - dangerous-functions.ts Math.random detection should detect Math.random for security tokens as high 1`] = `
146
+ Array [
147
+ Object {
148
+ "category": "dangerous_function",
149
+ "confidence": "high",
150
+ "description": "Math.random() is being used in a security-sensitive context. This is NOT cryptographically secure and should be replaced.",
151
+ "filePath": "src/auth.ts",
152
+ "id": "dangerous-func-src/auth.ts-3-Math.random for security",
153
+ "layer": 2,
154
+ "lineContent": "return Math.random().toString(36);",
155
+ "lineNumber": 3,
156
+ "severity": "high",
157
+ "suggestedFix": "Use crypto.randomBytes() for Node.js or crypto.getRandomValues() for browsers.",
158
+ "title": "Math.random() in security-sensitive function",
159
+ },
160
+ ]
161
+ `;
162
+
163
+ exports[`Refactor Safety - dangerous-functions.ts Math.random detection should detect Math.random in security context as high 1`] = `
164
+ Array [
165
+ Object {
166
+ "category": "dangerous_function",
167
+ "confidence": "high",
168
+ "description": "Math.random() assigned to security-sensitive variable 'secret'. Math.random() is NOT cryptographically secure.",
169
+ "filePath": "src/crypto.ts",
170
+ "id": "dangerous-func-src/crypto.ts-2-Math.random for security",
171
+ "layer": 2,
172
+ "lineContent": "const secret = Math.random().toString(36).substring(2);",
173
+ "lineNumber": 2,
174
+ "severity": "high",
175
+ "suggestedFix": "Use crypto.randomBytes() or crypto.getRandomValues() for security-sensitive values.",
176
+ "title": "Math.random() in security-sensitive variable",
177
+ },
178
+ ]
179
+ `;
180
+
181
+ exports[`Refactor Safety - dangerous-functions.ts Math.random detection should skip Math.random in seed files 1`] = `Array []`;
182
+
183
+ exports[`Refactor Safety - dangerous-functions.ts Math.random detection should skip cosmetic Math.random (CSS values) 1`] = `Array []`;
184
+
185
+ exports[`Refactor Safety - dangerous-functions.ts Prototype pollution detection should detect Object.assign with user input 1`] = `
186
+ Array [
187
+ Object {
188
+ "category": "dangerous_function",
189
+ "confidence": "high",
190
+ "description": "Object.assign with user input can lead to prototype pollution",
191
+ "filePath": "src/api/merge.ts",
192
+ "id": "dangerous-func-src/api/merge.ts-2-Object.assign with user input",
193
+ "layer": 2,
194
+ "lineContent": "const merged = Object.assign({}, req.body);",
195
+ "lineNumber": 2,
196
+ "severity": "high",
197
+ "suggestedFix": "Validate and sanitize input, or use a safe merge function",
198
+ "title": "Object.assign with user input",
199
+ },
200
+ ]
201
+ `;
202
+
203
+ exports[`Refactor Safety - dangerous-functions.ts Prototype pollution detection should detect spread operator with user input 1`] = `
204
+ Array [
205
+ Object {
206
+ "category": "dangerous_function",
207
+ "confidence": "high",
208
+ "description": "Spreading user input can lead to mass assignment vulnerabilities",
209
+ "filePath": "src/api/create.ts",
210
+ "id": "dangerous-func-src/api/create.ts-2-Spread operator with user input",
211
+ "layer": 2,
212
+ "lineContent": "const user = { ...req.body, createdAt: new Date() };",
213
+ "lineNumber": 2,
214
+ "severity": "medium",
215
+ "suggestedFix": "Explicitly pick allowed properties instead of spreading all input",
216
+ "title": "Spread operator with user input",
217
+ },
218
+ ]
219
+ `;
220
+
221
+ exports[`Refactor Safety - dangerous-functions.ts Regex DoS detection should detect dynamic regex construction 1`] = `
222
+ Array [
223
+ Object {
224
+ "category": "dangerous_function",
225
+ "confidence": "high",
226
+ "description": "Dynamic regex construction can lead to ReDoS attacks",
227
+ "filePath": "src/search.ts",
228
+ "id": "dangerous-func-src/search.ts-2-Potentially unsafe regex",
229
+ "layer": 2,
230
+ "lineContent": "const pattern = new RegExp(userPattern);",
231
+ "lineNumber": 2,
232
+ "severity": "medium",
233
+ "suggestedFix": "Validate regex patterns and consider using safe-regex library",
234
+ "title": "Potentially unsafe regex",
235
+ },
236
+ ]
237
+ `;
238
+
239
+ exports[`Refactor Safety - dangerous-functions.ts SQL injection detection should detect SQL string concatenation 1`] = `Array []`;
240
+
241
+ exports[`Refactor Safety - dangerous-functions.ts SQL injection detection should detect SQL with whitelist validation as lower severity 1`] = `Array []`;
242
+
243
+ exports[`Refactor Safety - dangerous-functions.ts SQL injection detection should detect raw SQL with template literal 1`] = `
244
+ Array [
245
+ Object {
246
+ "category": "dangerous_function",
247
+ "confidence": "high",
248
+ "description": "Template literals in SQL queries can lead to SQL injection",
249
+ "filePath": "src/db.ts",
250
+ "id": "dangerous-func-src/db.ts-2-SQL template literal",
251
+ "layer": 2,
252
+ "lineContent": "const query = \`SELECT * FROM users WHERE id = \${userId}\`;",
253
+ "lineNumber": 2,
254
+ "severity": "critical",
255
+ "suggestedFix": "Use parameterized queries with placeholders (?, $1, etc.)",
256
+ "title": "SQL template literal",
257
+ },
258
+ ]
259
+ `;
260
+
261
+ exports[`Refactor Safety - dangerous-functions.ts Static bootstrap script detection should detect static bootstrap as lower severity 1`] = `Array []`;
262
+
263
+ exports[`Refactor Safety - dangerous-functions.ts Test file handling should downgrade severity in test files 1`] = `
264
+ Array [
265
+ Object {
266
+ "category": "dangerous_function",
267
+ "confidence": "low",
268
+ "description": "Direct innerHTML assignment can lead to XSS vulnerabilities This appears to use dynamic content which increases XSS risk. (in test file)",
269
+ "filePath": "src/__tests__/handler.test.ts",
270
+ "id": "dangerous-func-src/__tests__/handler.test.ts-3-innerHTML assignment",
271
+ "layer": 2,
272
+ "lineContent": "element.innerHTML = testHtml;",
273
+ "lineNumber": 3,
274
+ "requiresAIValidation": true,
275
+ "severity": "low",
276
+ "suggestedFix": "Use textContent for text, or sanitize HTML with DOMPurify",
277
+ "title": "innerHTML assignment",
278
+ },
279
+ ]
280
+ `;
281
+
282
+ exports[`Refactor Safety - dangerous-functions.ts Test file handling should skip eval entirely in test files 1`] = `Array []`;
283
+
284
+ exports[`Refactor Safety - dangerous-functions.ts child_process detection should NOT flag RegExp.exec as child_process 1`] = `Array []`;
285
+
286
+ exports[`Refactor Safety - dangerous-functions.ts child_process detection should detect exec with user input 1`] = `
287
+ Array [
288
+ Object {
289
+ "category": "dangerous_function",
290
+ "confidence": "high",
291
+ "description": "Shell command execution can lead to command injection",
292
+ "filePath": "src/handler.ts",
293
+ "id": "dangerous-func-src/handler.ts-3-child_process exec",
294
+ "layer": 2,
295
+ "lineContent": "exec(\`ls \${userInput}\`, callback);",
296
+ "lineNumber": 3,
297
+ "severity": "high",
298
+ "suggestedFix": "Validate and sanitize all inputs, prefer execFile over exec",
299
+ "title": "child_process exec",
300
+ },
301
+ ]
302
+ `;
303
+
304
+ exports[`Refactor Safety - dangerous-functions.ts child_process detection should detect execSync with static command 1`] = `Array []`;
305
+
306
+ exports[`Refactor Safety - dangerous-functions.ts child_process detection should detect spawn with dynamic args 1`] = `
307
+ Array [
308
+ Object {
309
+ "category": "dangerous_function",
310
+ "confidence": "high",
311
+ "description": "Shell command execution can lead to command injection",
312
+ "filePath": "src/handler.ts",
313
+ "id": "dangerous-func-src/handler.ts-3-child_process exec",
314
+ "layer": 2,
315
+ "lineContent": "spawn('node', [userInput]);",
316
+ "lineNumber": 3,
317
+ "severity": "high",
318
+ "suggestedFix": "Validate and sanitize all inputs, prefer execFile over exec",
319
+ "title": "child_process exec",
320
+ },
321
+ ]
322
+ `;
323
+
324
+ exports[`Refactor Safety - dangerous-functions.ts eval/Function detection should detect Function constructor 1`] = `
325
+ Array [
326
+ Object {
327
+ "category": "dangerous_function",
328
+ "confidence": "high",
329
+ "description": "Function constructor can execute arbitrary code like eval()",
330
+ "filePath": "src/handler.ts",
331
+ "id": "dangerous-func-src/handler.ts-2-Function constructor",
332
+ "layer": 2,
333
+ "lineContent": "const fn = new Function('a', 'b', 'return a + b');",
334
+ "lineNumber": 2,
335
+ "requiresAIValidation": true,
336
+ "severity": "critical",
337
+ "suggestedFix": "Refactor to use static functions or safe alternatives",
338
+ "title": "Function constructor",
339
+ },
340
+ Object {
341
+ "category": "dangerous_function",
342
+ "confidence": "high",
343
+ "description": "Function constructor can execute arbitrary code like eval()",
344
+ "filePath": "src/handler.ts",
345
+ "id": "dangerous-func-src/handler.ts-3-Function constructor",
346
+ "layer": 2,
347
+ "lineContent": "const dynamic = new Function(userCode);",
348
+ "lineNumber": 3,
349
+ "requiresAIValidation": true,
350
+ "severity": "critical",
351
+ "suggestedFix": "Refactor to use static functions or safe alternatives",
352
+ "title": "Function constructor",
353
+ },
354
+ ]
355
+ `;
356
+
357
+ exports[`Refactor Safety - dangerous-functions.ts eval/Function detection should detect eval() usage 1`] = `
358
+ Array [
359
+ Object {
360
+ "category": "dangerous_function",
361
+ "confidence": "high",
362
+ "description": "eval() executes arbitrary code and is a major security risk",
363
+ "filePath": "src/handler.ts",
364
+ "id": "dangerous-func-src/handler.ts-2-eval() usage",
365
+ "layer": 2,
366
+ "lineContent": "const result = eval(userInput);",
367
+ "lineNumber": 2,
368
+ "requiresAIValidation": true,
369
+ "severity": "critical",
370
+ "suggestedFix": "Use JSON.parse() for JSON data, or refactor to avoid dynamic code execution",
371
+ "title": "eval() usage",
372
+ },
373
+ ]
374
+ `;
375
+
376
+ exports[`Refactor Safety - dangerous-functions.ts eval/Function detection should detect setTimeout/setInterval with string 1`] = `
377
+ Array [
378
+ Object {
379
+ "category": "dangerous_function",
380
+ "confidence": "high",
381
+ "description": "setTimeout/setInterval with string argument acts like eval()",
382
+ "filePath": "src/handler.ts",
383
+ "id": "dangerous-func-src/handler.ts-2-setTimeout/setInterval with string",
384
+ "layer": 2,
385
+ "lineContent": "setTimeout('alert(\\"hello\\")', 1000);",
386
+ "lineNumber": 2,
387
+ "severity": "high",
388
+ "suggestedFix": "Pass a function reference instead of a string",
389
+ "title": "setTimeout/setInterval with string",
390
+ },
391
+ Object {
392
+ "category": "dangerous_function",
393
+ "confidence": "high",
394
+ "description": "setTimeout/setInterval with string argument acts like eval()",
395
+ "filePath": "src/handler.ts",
396
+ "id": "dangerous-func-src/handler.ts-3-setTimeout/setInterval with string",
397
+ "layer": 2,
398
+ "lineContent": "setInterval('console.log(\\"tick\\")', 500);",
399
+ "lineNumber": 3,
400
+ "severity": "high",
401
+ "suggestedFix": "Pass a function reference instead of a string",
402
+ "title": "setTimeout/setInterval with string",
403
+ },
404
+ ]
405
+ `;
406
+
407
+ exports[`Refactor Safety - dangerous-functions.ts innerHTML/XSS detection should detect dangerouslySetInnerHTML 1`] = `
408
+ Array [
409
+ Object {
410
+ "category": "dangerous_function",
411
+ "confidence": "high",
412
+ "description": "dangerouslySetInnerHTML can lead to XSS if content is not sanitized This appears to use dynamic content which increases XSS risk.",
413
+ "filePath": "src/component.tsx",
414
+ "id": "dangerous-func-src/component.tsx-2-dangerouslySetInnerHTML",
415
+ "layer": 2,
416
+ "lineContent": "<div dangerouslySetInnerHTML={{ __html: userHtml }} />",
417
+ "lineNumber": 2,
418
+ "requiresAIValidation": true,
419
+ "severity": "high",
420
+ "suggestedFix": "Sanitize HTML content with DOMPurify before rendering",
421
+ "title": "dangerouslySetInnerHTML",
422
+ },
423
+ ]
424
+ `;
425
+
426
+ exports[`Refactor Safety - dangerous-functions.ts innerHTML/XSS detection should detect document.write 1`] = `
427
+ Array [
428
+ Object {
429
+ "category": "dangerous_function",
430
+ "confidence": "high",
431
+ "description": "document.write can introduce XSS vulnerabilities",
432
+ "filePath": "src/legacy.ts",
433
+ "id": "dangerous-func-src/legacy.ts-2-document.write",
434
+ "layer": 2,
435
+ "lineContent": "document.write('<script>alert(1)</script>');",
436
+ "lineNumber": 2,
437
+ "severity": "high",
438
+ "suggestedFix": "Use DOM manipulation methods instead",
439
+ "title": "document.write",
440
+ },
441
+ ]
442
+ `;
443
+
444
+ exports[`Refactor Safety - dangerous-functions.ts innerHTML/XSS detection should detect innerHTML with DOMPurify as lower severity 1`] = `Array []`;
445
+
446
+ exports[`Refactor Safety - dangerous-functions.ts innerHTML/XSS detection should detect innerHTML with dynamic content 1`] = `
447
+ Array [
448
+ Object {
449
+ "category": "dangerous_function",
450
+ "confidence": "high",
451
+ "description": "Direct innerHTML assignment can lead to XSS vulnerabilities This appears to use dynamic content which increases XSS risk.",
452
+ "filePath": "src/component.ts",
453
+ "id": "dangerous-func-src/component.ts-2-innerHTML assignment",
454
+ "layer": 2,
455
+ "lineContent": "element.innerHTML = userContent;",
456
+ "lineNumber": 2,
457
+ "requiresAIValidation": true,
458
+ "severity": "high",
459
+ "suggestedFix": "Use textContent for text, or sanitize HTML with DOMPurify",
460
+ "title": "innerHTML assignment",
461
+ },
462
+ Object {
463
+ "category": "dangerous_function",
464
+ "confidence": "high",
465
+ "description": "Direct innerHTML assignment can lead to XSS vulnerabilities This appears to use dynamic content which increases XSS risk.",
466
+ "filePath": "src/component.ts",
467
+ "id": "dangerous-func-src/component.ts-3-innerHTML assignment",
468
+ "layer": 2,
469
+ "lineContent": "div.innerHTML = \`<div>\${data}</div>\`;",
470
+ "lineNumber": 3,
471
+ "requiresAIValidation": true,
472
+ "severity": "high",
473
+ "suggestedFix": "Use textContent for text, or sanitize HTML with DOMPurify",
474
+ "title": "innerHTML assignment",
475
+ },
476
+ ]
477
+ `;
478
+
479
+ exports[`Refactor Safety - dangerous-functions.ts innerHTML/XSS detection should detect innerHTML with static content as lower severity 1`] = `Array []`;
480
+
481
+ exports[`Refactor Safety - dangerous-functions.ts innerHTML/XSS detection should skip style element innerHTML 1`] = `Array []`;
482
+
483
+ exports[`Refactor Safety - dangerous-functions.ts request.json() validation detection should skip when schema validation is present 1`] = `Array []`;
484
+
485
+ exports[`Refactor Safety - dangerous-functions.ts request.json() validation detection should skip when throwing auth helper is present 1`] = `Array []`;
486
+
487
+ exports[`Refactor Safety - dangerous-functions.ts request.json() validation detection should suggest schema validation for request.json() 1`] = `
488
+ Array [
489
+ Object {
490
+ "category": "dangerous_function",
491
+ "confidence": "low",
492
+ "description": "API endpoint parses request body without visible schema validation. Consider validating the shape of incoming data.",
493
+ "filePath": "src/app/api/create/route.ts",
494
+ "id": "request-json-src/app/api/create/route.ts-3",
495
+ "layer": 2,
496
+ "lineContent": "const body = await request.json();",
497
+ "lineNumber": 3,
498
+ "severity": "info",
499
+ "suggestedFix": "Add schema validation (e.g., zod): const body = await request.json(); const data = schema.parse(body);",
500
+ "title": "Request body without schema validation",
501
+ },
502
+ ]
503
+ `;