codeslick-cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) hide show
  1. package/README.md +458 -0
  2. package/__tests__/cli-reporter.test.ts +86 -0
  3. package/__tests__/config-loader.test.ts +247 -0
  4. package/__tests__/local-scanner.test.ts +245 -0
  5. package/bin/codeslick.cjs +153 -0
  6. package/dist/packages/cli/src/commands/auth.d.ts +36 -0
  7. package/dist/packages/cli/src/commands/auth.d.ts.map +1 -0
  8. package/dist/packages/cli/src/commands/auth.js +226 -0
  9. package/dist/packages/cli/src/commands/auth.js.map +1 -0
  10. package/dist/packages/cli/src/commands/config.d.ts +37 -0
  11. package/dist/packages/cli/src/commands/config.d.ts.map +1 -0
  12. package/dist/packages/cli/src/commands/config.js +196 -0
  13. package/dist/packages/cli/src/commands/config.js.map +1 -0
  14. package/dist/packages/cli/src/commands/init.d.ts +32 -0
  15. package/dist/packages/cli/src/commands/init.d.ts.map +1 -0
  16. package/dist/packages/cli/src/commands/init.js +171 -0
  17. package/dist/packages/cli/src/commands/init.js.map +1 -0
  18. package/dist/packages/cli/src/commands/scan.d.ts +40 -0
  19. package/dist/packages/cli/src/commands/scan.d.ts.map +1 -0
  20. package/dist/packages/cli/src/commands/scan.js +204 -0
  21. package/dist/packages/cli/src/commands/scan.js.map +1 -0
  22. package/dist/packages/cli/src/config/config-loader.d.ts +67 -0
  23. package/dist/packages/cli/src/config/config-loader.d.ts.map +1 -0
  24. package/dist/packages/cli/src/config/config-loader.js +146 -0
  25. package/dist/packages/cli/src/config/config-loader.js.map +1 -0
  26. package/dist/packages/cli/src/reporters/cli-reporter.d.ts +69 -0
  27. package/dist/packages/cli/src/reporters/cli-reporter.d.ts.map +1 -0
  28. package/dist/packages/cli/src/reporters/cli-reporter.js +244 -0
  29. package/dist/packages/cli/src/reporters/cli-reporter.js.map +1 -0
  30. package/dist/packages/cli/src/scanner/local-scanner.d.ts +92 -0
  31. package/dist/packages/cli/src/scanner/local-scanner.d.ts.map +1 -0
  32. package/dist/packages/cli/src/scanner/local-scanner.js +221 -0
  33. package/dist/packages/cli/src/scanner/local-scanner.js.map +1 -0
  34. package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.d.ts +88 -0
  35. package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.d.ts.map +1 -0
  36. package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.js +371 -0
  37. package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.js.map +1 -0
  38. package/dist/src/lib/analyzers/helpers/jsx-helpers.d.ts +63 -0
  39. package/dist/src/lib/analyzers/helpers/jsx-helpers.d.ts.map +1 -0
  40. package/dist/src/lib/analyzers/helpers/jsx-helpers.js +95 -0
  41. package/dist/src/lib/analyzers/helpers/jsx-helpers.js.map +1 -0
  42. package/dist/src/lib/analyzers/helpers/variable-tracker.d.ts +59 -0
  43. package/dist/src/lib/analyzers/helpers/variable-tracker.d.ts.map +1 -0
  44. package/dist/src/lib/analyzers/helpers/variable-tracker.js +231 -0
  45. package/dist/src/lib/analyzers/helpers/variable-tracker.js.map +1 -0
  46. package/dist/src/lib/analyzers/java/security-checks/access-control.d.ts +20 -0
  47. package/dist/src/lib/analyzers/java/security-checks/access-control.d.ts.map +1 -0
  48. package/dist/src/lib/analyzers/java/security-checks/access-control.js +129 -0
  49. package/dist/src/lib/analyzers/java/security-checks/access-control.js.map +1 -0
  50. package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.d.ts +25 -0
  51. package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.d.ts.map +1 -0
  52. package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.js +221 -0
  53. package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.js.map +1 -0
  54. package/dist/src/lib/analyzers/java/security-checks/code-quality.d.ts +18 -0
  55. package/dist/src/lib/analyzers/java/security-checks/code-quality.d.ts.map +1 -0
  56. package/dist/src/lib/analyzers/java/security-checks/code-quality.js +84 -0
  57. package/dist/src/lib/analyzers/java/security-checks/code-quality.js.map +1 -0
  58. package/dist/src/lib/analyzers/java/security-checks/crypto-validation.d.ts +18 -0
  59. package/dist/src/lib/analyzers/java/security-checks/crypto-validation.d.ts.map +1 -0
  60. package/dist/src/lib/analyzers/java/security-checks/crypto-validation.js +161 -0
  61. package/dist/src/lib/analyzers/java/security-checks/crypto-validation.js.map +1 -0
  62. package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.d.ts +20 -0
  63. package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.d.ts.map +1 -0
  64. package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.js +163 -0
  65. package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.js.map +1 -0
  66. package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.d.ts +24 -0
  67. package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.d.ts.map +1 -0
  68. package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.js +178 -0
  69. package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.js.map +1 -0
  70. package/dist/src/lib/analyzers/java/security-checks/exception-handling.d.ts +25 -0
  71. package/dist/src/lib/analyzers/java/security-checks/exception-handling.d.ts.map +1 -0
  72. package/dist/src/lib/analyzers/java/security-checks/exception-handling.js +179 -0
  73. package/dist/src/lib/analyzers/java/security-checks/exception-handling.js.map +1 -0
  74. package/dist/src/lib/analyzers/java/security-checks/file-operations.d.ts +17 -0
  75. package/dist/src/lib/analyzers/java/security-checks/file-operations.d.ts.map +1 -0
  76. package/dist/src/lib/analyzers/java/security-checks/file-operations.js +67 -0
  77. package/dist/src/lib/analyzers/java/security-checks/file-operations.js.map +1 -0
  78. package/dist/src/lib/analyzers/java/security-checks/framework-security.d.ts +25 -0
  79. package/dist/src/lib/analyzers/java/security-checks/framework-security.d.ts.map +1 -0
  80. package/dist/src/lib/analyzers/java/security-checks/framework-security.js +396 -0
  81. package/dist/src/lib/analyzers/java/security-checks/framework-security.js.map +1 -0
  82. package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.d.ts +20 -0
  83. package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.d.ts.map +1 -0
  84. package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.js +123 -0
  85. package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.js.map +1 -0
  86. package/dist/src/lib/analyzers/java/security-checks/injection-attacks.d.ts +23 -0
  87. package/dist/src/lib/analyzers/java/security-checks/injection-attacks.d.ts.map +1 -0
  88. package/dist/src/lib/analyzers/java/security-checks/injection-attacks.js +201 -0
  89. package/dist/src/lib/analyzers/java/security-checks/injection-attacks.js.map +1 -0
  90. package/dist/src/lib/analyzers/java/security-checks/insecure-design.d.ts +20 -0
  91. package/dist/src/lib/analyzers/java/security-checks/insecure-design.d.ts.map +1 -0
  92. package/dist/src/lib/analyzers/java/security-checks/insecure-design.js +121 -0
  93. package/dist/src/lib/analyzers/java/security-checks/insecure-design.js.map +1 -0
  94. package/dist/src/lib/analyzers/java/security-checks/logging-failures.d.ts +20 -0
  95. package/dist/src/lib/analyzers/java/security-checks/logging-failures.d.ts.map +1 -0
  96. package/dist/src/lib/analyzers/java/security-checks/logging-failures.js +89 -0
  97. package/dist/src/lib/analyzers/java/security-checks/logging-failures.js.map +1 -0
  98. package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.d.ts +26 -0
  99. package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.d.ts.map +1 -0
  100. package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.js +309 -0
  101. package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.js.map +1 -0
  102. package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.d.ts +18 -0
  103. package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.d.ts.map +1 -0
  104. package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.js +114 -0
  105. package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.js.map +1 -0
  106. package/dist/src/lib/analyzers/java/utils/createVulnerability.d.ts +58 -0
  107. package/dist/src/lib/analyzers/java/utils/createVulnerability.d.ts.map +1 -0
  108. package/dist/src/lib/analyzers/java/utils/createVulnerability.js +71 -0
  109. package/dist/src/lib/analyzers/java/utils/createVulnerability.js.map +1 -0
  110. package/dist/src/lib/analyzers/java-analyzer.d.ts +209 -0
  111. package/dist/src/lib/analyzers/java-analyzer.d.ts.map +1 -0
  112. package/dist/src/lib/analyzers/java-analyzer.js +1720 -0
  113. package/dist/src/lib/analyzers/java-analyzer.js.map +1 -0
  114. package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.d.ts +27 -0
  115. package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.d.ts.map +1 -0
  116. package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.js +123 -0
  117. package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.js.map +1 -0
  118. package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.d.ts +44 -0
  119. package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.d.ts.map +1 -0
  120. package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.js +224 -0
  121. package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.js.map +1 -0
  122. package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.d.ts +50 -0
  123. package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.d.ts.map +1 -0
  124. package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.js +284 -0
  125. package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.js.map +1 -0
  126. package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.d.ts +27 -0
  127. package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.d.ts.map +1 -0
  128. package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.js +86 -0
  129. package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.js.map +1 -0
  130. package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.d.ts +32 -0
  131. package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.d.ts.map +1 -0
  132. package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.js +44 -0
  133. package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.js.map +1 -0
  134. package/dist/src/lib/analyzers/javascript/security-checks/access-control.d.ts +22 -0
  135. package/dist/src/lib/analyzers/javascript/security-checks/access-control.d.ts.map +1 -0
  136. package/dist/src/lib/analyzers/javascript/security-checks/access-control.js +168 -0
  137. package/dist/src/lib/analyzers/javascript/security-checks/access-control.js.map +1 -0
  138. package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.d.ts +25 -0
  139. package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.d.ts.map +1 -0
  140. package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.js +232 -0
  141. package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.js.map +1 -0
  142. package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.d.ts +27 -0
  143. package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.d.ts.map +1 -0
  144. package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.js +222 -0
  145. package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.js.map +1 -0
  146. package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.d.ts +28 -0
  147. package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.d.ts.map +1 -0
  148. package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.js +176 -0
  149. package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.js.map +1 -0
  150. package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.d.ts +23 -0
  151. package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.d.ts.map +1 -0
  152. package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.js +113 -0
  153. package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.js.map +1 -0
  154. package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.d.ts +28 -0
  155. package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.d.ts.map +1 -0
  156. package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.js +227 -0
  157. package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.js.map +1 -0
  158. package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.d.ts +32 -0
  159. package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.d.ts.map +1 -0
  160. package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.js +260 -0
  161. package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.js.map +1 -0
  162. package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.d.ts +26 -0
  163. package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.d.ts.map +1 -0
  164. package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.js +164 -0
  165. package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.js.map +1 -0
  166. package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.d.ts +26 -0
  167. package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.d.ts.map +1 -0
  168. package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.js +775 -0
  169. package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.js.map +1 -0
  170. package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.d.ts +25 -0
  171. package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.d.ts.map +1 -0
  172. package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.js +168 -0
  173. package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.js.map +1 -0
  174. package/dist/src/lib/analyzers/javascript/security-checks/storage-security.d.ts +27 -0
  175. package/dist/src/lib/analyzers/javascript/security-checks/storage-security.d.ts.map +1 -0
  176. package/dist/src/lib/analyzers/javascript/security-checks/storage-security.js +108 -0
  177. package/dist/src/lib/analyzers/javascript/security-checks/storage-security.js.map +1 -0
  178. package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.d.ts +28 -0
  179. package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.d.ts.map +1 -0
  180. package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.js +143 -0
  181. package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.js.map +1 -0
  182. package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.d.ts +53 -0
  183. package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.d.ts.map +1 -0
  184. package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.js +144 -0
  185. package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.js.map +1 -0
  186. package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.d.ts +72 -0
  187. package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.d.ts.map +1 -0
  188. package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.js +314 -0
  189. package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.js.map +1 -0
  190. package/dist/src/lib/analyzers/javascript/utils/createVulnerability.d.ts +58 -0
  191. package/dist/src/lib/analyzers/javascript/utils/createVulnerability.d.ts.map +1 -0
  192. package/dist/src/lib/analyzers/javascript/utils/createVulnerability.js +71 -0
  193. package/dist/src/lib/analyzers/javascript/utils/createVulnerability.js.map +1 -0
  194. package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.d.ts +36 -0
  195. package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.d.ts.map +1 -0
  196. package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.js +70 -0
  197. package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.js.map +1 -0
  198. package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.d.ts +29 -0
  199. package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.d.ts.map +1 -0
  200. package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.js +55 -0
  201. package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.js.map +1 -0
  202. package/dist/src/lib/analyzers/javascript-analyzer.d.ts +95 -0
  203. package/dist/src/lib/analyzers/javascript-analyzer.d.ts.map +1 -0
  204. package/dist/src/lib/analyzers/javascript-analyzer.js +2141 -0
  205. package/dist/src/lib/analyzers/javascript-analyzer.js.map +1 -0
  206. package/dist/src/lib/analyzers/python/security-checks/access-control.d.ts +21 -0
  207. package/dist/src/lib/analyzers/python/security-checks/access-control.d.ts.map +1 -0
  208. package/dist/src/lib/analyzers/python/security-checks/access-control.js +305 -0
  209. package/dist/src/lib/analyzers/python/security-checks/access-control.js.map +1 -0
  210. package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.d.ts +25 -0
  211. package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.d.ts.map +1 -0
  212. package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.js +242 -0
  213. package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.js.map +1 -0
  214. package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.d.ts +24 -0
  215. package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.d.ts.map +1 -0
  216. package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.js +207 -0
  217. package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.js.map +1 -0
  218. package/dist/src/lib/analyzers/python/security-checks/code-quality.d.ts +27 -0
  219. package/dist/src/lib/analyzers/python/security-checks/code-quality.d.ts.map +1 -0
  220. package/dist/src/lib/analyzers/python/security-checks/code-quality.js +206 -0
  221. package/dist/src/lib/analyzers/python/security-checks/code-quality.js.map +1 -0
  222. package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.d.ts +24 -0
  223. package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.d.ts.map +1 -0
  224. package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.js +113 -0
  225. package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.js.map +1 -0
  226. package/dist/src/lib/analyzers/python/security-checks/crypto-failures.d.ts +20 -0
  227. package/dist/src/lib/analyzers/python/security-checks/crypto-failures.d.ts.map +1 -0
  228. package/dist/src/lib/analyzers/python/security-checks/crypto-failures.js +129 -0
  229. package/dist/src/lib/analyzers/python/security-checks/crypto-failures.js.map +1 -0
  230. package/dist/src/lib/analyzers/python/security-checks/data-integrity.d.ts +19 -0
  231. package/dist/src/lib/analyzers/python/security-checks/data-integrity.d.ts.map +1 -0
  232. package/dist/src/lib/analyzers/python/security-checks/data-integrity.js +90 -0
  233. package/dist/src/lib/analyzers/python/security-checks/data-integrity.js.map +1 -0
  234. package/dist/src/lib/analyzers/python/security-checks/deserialization.d.ts +20 -0
  235. package/dist/src/lib/analyzers/python/security-checks/deserialization.d.ts.map +1 -0
  236. package/dist/src/lib/analyzers/python/security-checks/deserialization.js +68 -0
  237. package/dist/src/lib/analyzers/python/security-checks/deserialization.js.map +1 -0
  238. package/dist/src/lib/analyzers/python/security-checks/django-security.d.ts +25 -0
  239. package/dist/src/lib/analyzers/python/security-checks/django-security.d.ts.map +1 -0
  240. package/dist/src/lib/analyzers/python/security-checks/django-security.js +180 -0
  241. package/dist/src/lib/analyzers/python/security-checks/django-security.js.map +1 -0
  242. package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.d.ts +23 -0
  243. package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.d.ts.map +1 -0
  244. package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.js +127 -0
  245. package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.js.map +1 -0
  246. package/dist/src/lib/analyzers/python/security-checks/exception-handling.d.ts +23 -0
  247. package/dist/src/lib/analyzers/python/security-checks/exception-handling.d.ts.map +1 -0
  248. package/dist/src/lib/analyzers/python/security-checks/exception-handling.js +120 -0
  249. package/dist/src/lib/analyzers/python/security-checks/exception-handling.js.map +1 -0
  250. package/dist/src/lib/analyzers/python/security-checks/flask-security.d.ts +24 -0
  251. package/dist/src/lib/analyzers/python/security-checks/flask-security.d.ts.map +1 -0
  252. package/dist/src/lib/analyzers/python/security-checks/flask-security.js +143 -0
  253. package/dist/src/lib/analyzers/python/security-checks/flask-security.js.map +1 -0
  254. package/dist/src/lib/analyzers/python/security-checks/injection-attacks.d.ts +28 -0
  255. package/dist/src/lib/analyzers/python/security-checks/injection-attacks.d.ts.map +1 -0
  256. package/dist/src/lib/analyzers/python/security-checks/injection-attacks.js +174 -0
  257. package/dist/src/lib/analyzers/python/security-checks/injection-attacks.js.map +1 -0
  258. package/dist/src/lib/analyzers/python/security-checks/insecure-design.d.ts +20 -0
  259. package/dist/src/lib/analyzers/python/security-checks/insecure-design.d.ts.map +1 -0
  260. package/dist/src/lib/analyzers/python/security-checks/insecure-design.js +160 -0
  261. package/dist/src/lib/analyzers/python/security-checks/insecure-design.js.map +1 -0
  262. package/dist/src/lib/analyzers/python/security-checks/logging-failures.d.ts +20 -0
  263. package/dist/src/lib/analyzers/python/security-checks/logging-failures.d.ts.map +1 -0
  264. package/dist/src/lib/analyzers/python/security-checks/logging-failures.js +121 -0
  265. package/dist/src/lib/analyzers/python/security-checks/logging-failures.js.map +1 -0
  266. package/dist/src/lib/analyzers/python/security-checks/nosql-injection.d.ts +26 -0
  267. package/dist/src/lib/analyzers/python/security-checks/nosql-injection.d.ts.map +1 -0
  268. package/dist/src/lib/analyzers/python/security-checks/nosql-injection.js +248 -0
  269. package/dist/src/lib/analyzers/python/security-checks/nosql-injection.js.map +1 -0
  270. package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.d.ts +26 -0
  271. package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.d.ts.map +1 -0
  272. package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.js +375 -0
  273. package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.js.map +1 -0
  274. package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.d.ts +26 -0
  275. package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.d.ts.map +1 -0
  276. package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.js +160 -0
  277. package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.js.map +1 -0
  278. package/dist/src/lib/analyzers/python/security-checks/web-security.d.ts +23 -0
  279. package/dist/src/lib/analyzers/python/security-checks/web-security.d.ts.map +1 -0
  280. package/dist/src/lib/analyzers/python/security-checks/web-security.js +117 -0
  281. package/dist/src/lib/analyzers/python/security-checks/web-security.js.map +1 -0
  282. package/dist/src/lib/analyzers/python/utils/createVulnerability.d.ts +58 -0
  283. package/dist/src/lib/analyzers/python/utils/createVulnerability.d.ts.map +1 -0
  284. package/dist/src/lib/analyzers/python/utils/createVulnerability.js +71 -0
  285. package/dist/src/lib/analyzers/python/utils/createVulnerability.js.map +1 -0
  286. package/dist/src/lib/analyzers/python-analyzer.d.ts +111 -0
  287. package/dist/src/lib/analyzers/python-analyzer.d.ts.map +1 -0
  288. package/dist/src/lib/analyzers/python-analyzer.js +1600 -0
  289. package/dist/src/lib/analyzers/python-analyzer.js.map +1 -0
  290. package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.d.ts +14 -0
  291. package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.d.ts.map +1 -0
  292. package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.js +47 -0
  293. package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.js.map +1 -0
  294. package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.d.ts +13 -0
  295. package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.d.ts.map +1 -0
  296. package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.js +36 -0
  297. package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.js.map +1 -0
  298. package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.d.ts +15 -0
  299. package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.d.ts.map +1 -0
  300. package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.js +68 -0
  301. package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.js.map +1 -0
  302. package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.d.ts +15 -0
  303. package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.d.ts.map +1 -0
  304. package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.js +68 -0
  305. package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.js.map +1 -0
  306. package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.d.ts +12 -0
  307. package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.d.ts.map +1 -0
  308. package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.js +45 -0
  309. package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.js.map +1 -0
  310. package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.d.ts +14 -0
  311. package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.d.ts.map +1 -0
  312. package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.js +47 -0
  313. package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.js.map +1 -0
  314. package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.d.ts +13 -0
  315. package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.d.ts.map +1 -0
  316. package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.js +36 -0
  317. package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.js.map +1 -0
  318. package/dist/src/lib/analyzers/secrets/patterns/api-keys.d.ts +15 -0
  319. package/dist/src/lib/analyzers/secrets/patterns/api-keys.d.ts.map +1 -0
  320. package/dist/src/lib/analyzers/secrets/patterns/api-keys.js +32 -0
  321. package/dist/src/lib/analyzers/secrets/patterns/api-keys.js.map +1 -0
  322. package/dist/src/lib/analyzers/secrets/patterns/credentials.d.ts +15 -0
  323. package/dist/src/lib/analyzers/secrets/patterns/credentials.d.ts.map +1 -0
  324. package/dist/src/lib/analyzers/secrets/patterns/credentials.js +68 -0
  325. package/dist/src/lib/analyzers/secrets/patterns/credentials.js.map +1 -0
  326. package/dist/src/lib/analyzers/secrets/patterns/private-keys.d.ts +16 -0
  327. package/dist/src/lib/analyzers/secrets/patterns/private-keys.d.ts.map +1 -0
  328. package/dist/src/lib/analyzers/secrets/patterns/private-keys.js +79 -0
  329. package/dist/src/lib/analyzers/secrets/patterns/private-keys.js.map +1 -0
  330. package/dist/src/lib/analyzers/secrets/patterns/tokens.d.ts +15 -0
  331. package/dist/src/lib/analyzers/secrets/patterns/tokens.d.ts.map +1 -0
  332. package/dist/src/lib/analyzers/secrets/patterns/tokens.js +58 -0
  333. package/dist/src/lib/analyzers/secrets/patterns/tokens.js.map +1 -0
  334. package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts +88 -0
  335. package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts.map +1 -0
  336. package/dist/src/lib/analyzers/secrets/secrets-analyzer.js +162 -0
  337. package/dist/src/lib/analyzers/secrets/secrets-analyzer.js.map +1 -0
  338. package/dist/src/lib/analyzers/secrets/validators/context-checker.d.ts +56 -0
  339. package/dist/src/lib/analyzers/secrets/validators/context-checker.d.ts.map +1 -0
  340. package/dist/src/lib/analyzers/secrets/validators/context-checker.js +199 -0
  341. package/dist/src/lib/analyzers/secrets/validators/context-checker.js.map +1 -0
  342. package/dist/src/lib/analyzers/secrets/validators/entropy-checker.d.ts +56 -0
  343. package/dist/src/lib/analyzers/secrets/validators/entropy-checker.d.ts.map +1 -0
  344. package/dist/src/lib/analyzers/secrets/validators/entropy-checker.js +102 -0
  345. package/dist/src/lib/analyzers/secrets/validators/entropy-checker.js.map +1 -0
  346. package/dist/src/lib/analyzers/security-checks/es6-security.d.ts +38 -0
  347. package/dist/src/lib/analyzers/security-checks/es6-security.d.ts.map +1 -0
  348. package/dist/src/lib/analyzers/security-checks/es6-security.js +125 -0
  349. package/dist/src/lib/analyzers/security-checks/es6-security.js.map +1 -0
  350. package/dist/src/lib/analyzers/security-checks/python-async-security.d.ts +46 -0
  351. package/dist/src/lib/analyzers/security-checks/python-async-security.d.ts.map +1 -0
  352. package/dist/src/lib/analyzers/security-checks/python-async-security.js +92 -0
  353. package/dist/src/lib/analyzers/security-checks/python-async-security.js.map +1 -0
  354. package/dist/src/lib/analyzers/security-checks/react-security.d.ts +49 -0
  355. package/dist/src/lib/analyzers/security-checks/react-security.d.ts.map +1 -0
  356. package/dist/src/lib/analyzers/security-checks/react-security.js +125 -0
  357. package/dist/src/lib/analyzers/security-checks/react-security.js.map +1 -0
  358. package/dist/src/lib/analyzers/types.d.ts +92 -0
  359. package/dist/src/lib/analyzers/types.d.ts.map +1 -0
  360. package/dist/src/lib/analyzers/types.js +3 -0
  361. package/dist/src/lib/analyzers/types.js.map +1 -0
  362. package/dist/src/lib/analyzers/typescript/security-checks/access-control.d.ts +19 -0
  363. package/dist/src/lib/analyzers/typescript/security-checks/access-control.d.ts.map +1 -0
  364. package/dist/src/lib/analyzers/typescript/security-checks/access-control.js +210 -0
  365. package/dist/src/lib/analyzers/typescript/security-checks/access-control.js.map +1 -0
  366. package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.d.ts +25 -0
  367. package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.d.ts.map +1 -0
  368. package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.js +242 -0
  369. package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.js.map +1 -0
  370. package/dist/src/lib/analyzers/typescript/security-checks/authentication.d.ts +28 -0
  371. package/dist/src/lib/analyzers/typescript/security-checks/authentication.d.ts.map +1 -0
  372. package/dist/src/lib/analyzers/typescript/security-checks/authentication.js +357 -0
  373. package/dist/src/lib/analyzers/typescript/security-checks/authentication.js.map +1 -0
  374. package/dist/src/lib/analyzers/typescript/security-checks/code-injection.d.ts +26 -0
  375. package/dist/src/lib/analyzers/typescript/security-checks/code-injection.d.ts.map +1 -0
  376. package/dist/src/lib/analyzers/typescript/security-checks/code-injection.js +380 -0
  377. package/dist/src/lib/analyzers/typescript/security-checks/code-injection.js.map +1 -0
  378. package/dist/src/lib/analyzers/typescript/security-checks/code-quality.d.ts +23 -0
  379. package/dist/src/lib/analyzers/typescript/security-checks/code-quality.d.ts.map +1 -0
  380. package/dist/src/lib/analyzers/typescript/security-checks/code-quality.js +109 -0
  381. package/dist/src/lib/analyzers/typescript/security-checks/code-quality.js.map +1 -0
  382. package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.d.ts +21 -0
  383. package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.d.ts.map +1 -0
  384. package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.js +153 -0
  385. package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.js.map +1 -0
  386. package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.d.ts +23 -0
  387. package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.d.ts.map +1 -0
  388. package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.js +146 -0
  389. package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.js.map +1 -0
  390. package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.d.ts +23 -0
  391. package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.d.ts.map +1 -0
  392. package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.js +187 -0
  393. package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.js.map +1 -0
  394. package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.d.ts +19 -0
  395. package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.d.ts.map +1 -0
  396. package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.js +97 -0
  397. package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.js.map +1 -0
  398. package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.d.ts +29 -0
  399. package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.d.ts.map +1 -0
  400. package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.js +319 -0
  401. package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.js.map +1 -0
  402. package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.d.ts +21 -0
  403. package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.d.ts.map +1 -0
  404. package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.js +121 -0
  405. package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.js.map +1 -0
  406. package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.d.ts +27 -0
  407. package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.d.ts.map +1 -0
  408. package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.js +213 -0
  409. package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.js.map +1 -0
  410. package/dist/src/lib/analyzers/typescript/security-checks/type-security.d.ts +19 -0
  411. package/dist/src/lib/analyzers/typescript/security-checks/type-security.d.ts.map +1 -0
  412. package/dist/src/lib/analyzers/typescript/security-checks/type-security.js +59 -0
  413. package/dist/src/lib/analyzers/typescript/security-checks/type-security.js.map +1 -0
  414. package/dist/src/lib/analyzers/typescript/type-checker.d.ts +17 -0
  415. package/dist/src/lib/analyzers/typescript/type-checker.d.ts.map +1 -0
  416. package/dist/src/lib/analyzers/typescript/type-checker.js +515 -0
  417. package/dist/src/lib/analyzers/typescript/type-checker.js.map +1 -0
  418. package/dist/src/lib/analyzers/typescript/utils/createVulnerability.d.ts +58 -0
  419. package/dist/src/lib/analyzers/typescript/utils/createVulnerability.d.ts.map +1 -0
  420. package/dist/src/lib/analyzers/typescript/utils/createVulnerability.js +71 -0
  421. package/dist/src/lib/analyzers/typescript/utils/createVulnerability.js.map +1 -0
  422. package/dist/src/lib/analyzers/typescript-analyzer.d.ts +116 -0
  423. package/dist/src/lib/analyzers/typescript-analyzer.d.ts.map +1 -0
  424. package/dist/src/lib/analyzers/typescript-analyzer.js +1660 -0
  425. package/dist/src/lib/analyzers/typescript-analyzer.js.map +1 -0
  426. package/dist/src/lib/security/compliance-mapping.d.ts +29 -0
  427. package/dist/src/lib/security/compliance-mapping.d.ts.map +1 -0
  428. package/dist/src/lib/security/compliance-mapping.js +1342 -0
  429. package/dist/src/lib/security/compliance-mapping.js.map +1 -0
  430. package/dist/src/lib/security/severity-scoring.d.ts +47 -0
  431. package/dist/src/lib/security/severity-scoring.d.ts.map +1 -0
  432. package/dist/src/lib/security/severity-scoring.js +965 -0
  433. package/dist/src/lib/security/severity-scoring.js.map +1 -0
  434. package/dist/src/lib/standards/references.d.ts +16 -0
  435. package/dist/src/lib/standards/references.d.ts.map +1 -0
  436. package/dist/src/lib/standards/references.js +1161 -0
  437. package/dist/src/lib/standards/references.js.map +1 -0
  438. package/dist/src/lib/types/index.d.ts +167 -0
  439. package/dist/src/lib/types/index.d.ts.map +1 -0
  440. package/dist/src/lib/types/index.js +3 -0
  441. package/dist/src/lib/types/index.js.map +1 -0
  442. package/dist/src/lib/utils/code-cleaner.d.ts +59 -0
  443. package/dist/src/lib/utils/code-cleaner.d.ts.map +1 -0
  444. package/dist/src/lib/utils/code-cleaner.js +283 -0
  445. package/dist/src/lib/utils/code-cleaner.js.map +1 -0
  446. package/package.json +51 -0
  447. package/src/commands/auth.ts +308 -0
  448. package/src/commands/config.ts +226 -0
  449. package/src/commands/init.ts +202 -0
  450. package/src/commands/scan.ts +238 -0
  451. package/src/config/config-loader.ts +175 -0
  452. package/src/reporters/cli-reporter.ts +282 -0
  453. package/src/scanner/local-scanner.ts +250 -0
  454. package/tsconfig.json +24 -0
  455. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ /**
3
+ * Context Checker
4
+ *
5
+ * Reduces false positives by analyzing code context.
6
+ * Identifies safe patterns like:
7
+ * - Test files
8
+ * - Example code
9
+ * - Documentation
10
+ * - Placeholder values
11
+ * - Environment variable references
12
+ *
13
+ * Created: Phase 1.5, Week 1
14
+ * Date: January 7, 2026
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.isPlaceholder = isPlaceholder;
18
+ exports.isSafeContext = isSafeContext;
19
+ exports.isSafeFile = isSafeFile;
20
+ exports.isLikelyFalsePositive = isLikelyFalsePositive;
21
+ exports.calculateContextConfidence = calculateContextConfidence;
22
+ /**
23
+ * Common placeholder values that are NOT real secrets
24
+ */
25
+ const PLACEHOLDER_VALUES = [
26
+ 'your_api_key_here',
27
+ 'your_api_key',
28
+ 'your-api-key',
29
+ 'your_secret_key',
30
+ 'your-secret',
31
+ 'example_key',
32
+ 'test_key',
33
+ 'fake_key',
34
+ 'dummy_key',
35
+ 'sample_key',
36
+ 'replace_me',
37
+ 'change_me',
38
+ 'todo',
39
+ 'xxx',
40
+ 'yyy',
41
+ 'zzz',
42
+ '12345',
43
+ 'abcdef',
44
+ '000000',
45
+ 'real_key', // Common test value
46
+ ];
47
+ /**
48
+ * Patterns indicating safe context (not real secrets)
49
+ */
50
+ const SAFE_CONTEXT_PATTERNS = [
51
+ /process\.env\./i, // Environment variable
52
+ /os\.environ/i, // Python environment variable
53
+ /System\.getenv/i, // Java environment variable
54
+ /config\./i, // Configuration object
55
+ /\.example/i, // Example file
56
+ /\.template/i, // Template file
57
+ /\.sample/i, // Sample file
58
+ /\/\/ TODO/i, // TODO comment
59
+ /\/\/ FIXME/i, // FIXME comment
60
+ /\/\/ Example/i, // Example comment
61
+ /# Example/i, // Python example comment
62
+ /# TODO/i, // Python TODO comment
63
+ ];
64
+ /**
65
+ * File patterns indicating test/example/documentation files
66
+ */
67
+ const SAFE_FILE_PATTERNS = [
68
+ /\.test\./,
69
+ /\.spec\./,
70
+ /\.example\./,
71
+ /example/i, // Match any file with "example" in name
72
+ /\.template\./,
73
+ /\.sample\./,
74
+ /\.md$/,
75
+ /\.txt$/,
76
+ /\/test\//,
77
+ /\/tests\//,
78
+ /\/spec\//,
79
+ /\/specs\//,
80
+ /\/examples\//,
81
+ /\/docs\//,
82
+ /\/documentation\//,
83
+ /\/__tests__\//,
84
+ /\/__mocks__\//,
85
+ /README/i,
86
+ /CHANGELOG/i,
87
+ /LICENSE/i,
88
+ ];
89
+ /**
90
+ * Check if value is a placeholder (not a real secret)
91
+ *
92
+ * @param value - Secret value to check
93
+ * @returns True if value is a placeholder
94
+ */
95
+ function isPlaceholder(value) {
96
+ const valueLower = value.toLowerCase();
97
+ // Check against known placeholders
98
+ for (const placeholder of PLACEHOLDER_VALUES) {
99
+ if (valueLower.includes(placeholder.toLowerCase())) {
100
+ return true;
101
+ }
102
+ }
103
+ // Check if value is too simple (repeated characters)
104
+ if (/^(.)\1+$/.test(value)) {
105
+ return true; // All same character (e.g., "aaaaaaa")
106
+ }
107
+ // Check if value looks like example/test data
108
+ if (/^(test|example|demo|sample|fake|dummy)/i.test(value)) {
109
+ return true;
110
+ }
111
+ return false;
112
+ }
113
+ /**
114
+ * Check if context indicates safe usage (not a real secret)
115
+ *
116
+ * @param context - Line of code containing the secret
117
+ * @returns True if context is safe
118
+ */
119
+ function isSafeContext(context) {
120
+ for (const pattern of SAFE_CONTEXT_PATTERNS) {
121
+ if (pattern.test(context)) {
122
+ return true;
123
+ }
124
+ }
125
+ return false;
126
+ }
127
+ /**
128
+ * Check if file is test/example/documentation
129
+ *
130
+ * @param filePath - File path to check
131
+ * @returns True if file is test/example/docs
132
+ */
133
+ function isSafeFile(filePath) {
134
+ for (const pattern of SAFE_FILE_PATTERNS) {
135
+ if (pattern.test(filePath)) {
136
+ return true;
137
+ }
138
+ }
139
+ return false;
140
+ }
141
+ /**
142
+ * Check if value is likely a false positive
143
+ * Combines all heuristics to determine if secret detection should be skipped
144
+ *
145
+ * @param value - Secret value detected
146
+ * @param context - Line of code containing the secret
147
+ * @param filePath - File path
148
+ * @returns True if likely false positive
149
+ */
150
+ function isLikelyFalsePositive(value, context, filePath) {
151
+ // Check 1: Is value a placeholder?
152
+ if (isPlaceholder(value)) {
153
+ return true;
154
+ }
155
+ // Check 2: Is context safe (env var, config, etc.)?
156
+ if (isSafeContext(context)) {
157
+ return true;
158
+ }
159
+ // Check 3: Is file test/example/docs?
160
+ if (isSafeFile(filePath)) {
161
+ return true;
162
+ }
163
+ // Check 4: Value too short (likely not a real secret)
164
+ if (value.length < 8) {
165
+ return true;
166
+ }
167
+ // Not a false positive
168
+ return false;
169
+ }
170
+ /**
171
+ * Calculate confidence score (0-100) based on context
172
+ * Lower score = more likely false positive
173
+ *
174
+ * @param value - Secret value detected
175
+ * @param context - Line of code
176
+ * @param filePath - File path
177
+ * @returns Confidence score (0-100)
178
+ */
179
+ function calculateContextConfidence(value, context, filePath) {
180
+ let confidence = 100; // Start at maximum confidence
181
+ // Reduce confidence for placeholders
182
+ if (isPlaceholder(value)) {
183
+ confidence -= 60;
184
+ }
185
+ // Reduce confidence for safe contexts
186
+ if (isSafeContext(context)) {
187
+ confidence -= 40;
188
+ }
189
+ // Reduce confidence for test/example files
190
+ if (isSafeFile(filePath)) {
191
+ confidence -= 30;
192
+ }
193
+ // Reduce confidence for short values
194
+ if (value.length < 12) {
195
+ confidence -= 20;
196
+ }
197
+ return Math.max(confidence, 0);
198
+ }
199
+ //# sourceMappingURL=context-checker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-checker.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/secrets/validators/context-checker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Entropy Checker
3
+ *
4
+ * Calculates Shannon entropy to detect high-randomness strings.
5
+ * High entropy indicates potential secrets (API keys, tokens, hashes).
6
+ *
7
+ * Entropy scale (base-2):
8
+ * - 0-2: Low entropy (repeated chars, simple patterns)
9
+ * - 2-3.5: Medium entropy (English text, simple passwords)
10
+ * - 3.5-4.5: High entropy (mixed alphanumeric, potential secrets)
11
+ * - 4.5+: Very high entropy (cryptographic-grade randomness)
12
+ *
13
+ * Created: Phase 1.5, Week 1
14
+ * Date: January 7, 2026
15
+ */
16
+ /**
17
+ * Calculate Shannon entropy of a string
18
+ *
19
+ * @param str - String to analyze
20
+ * @returns Entropy value (0-8, where 8 is maximum for base-256)
21
+ */
22
+ export declare function calculateEntropy(str: string): number;
23
+ /**
24
+ * Check if string has high entropy (likely random/cryptographic)
25
+ *
26
+ * @param str - String to analyze
27
+ * @param threshold - Entropy threshold (default 4.0)
28
+ * @returns True if entropy exceeds threshold
29
+ */
30
+ export declare function hasHighEntropy(str: string, threshold?: number): boolean;
31
+ /**
32
+ * Calculate entropy for each character type separately
33
+ * Useful for detecting mixed-case alphanumeric secrets
34
+ *
35
+ * @param str - String to analyze
36
+ * @returns Object with entropy breakdown
37
+ */
38
+ export declare function calculateEntropyBreakdown(str: string): {
39
+ overall: number;
40
+ lowercase: number;
41
+ uppercase: number;
42
+ digits: number;
43
+ symbols: number;
44
+ };
45
+ /**
46
+ * Detect if string has cryptographic-grade randomness
47
+ * Uses multiple heuristics:
48
+ * - High overall entropy (>4.5)
49
+ * - Mixed character types (uppercase, lowercase, digits)
50
+ * - Length >= 20 characters
51
+ *
52
+ * @param str - String to analyze
53
+ * @returns True if likely cryptographic secret
54
+ */
55
+ export declare function isCryptographicSecret(str: string): boolean;
56
+ //# sourceMappingURL=entropy-checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entropy-checker.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/secrets/validators/entropy-checker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAqBpD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,OAAO,CAE5E;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAaA;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAmB1D"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ /**
3
+ * Entropy Checker
4
+ *
5
+ * Calculates Shannon entropy to detect high-randomness strings.
6
+ * High entropy indicates potential secrets (API keys, tokens, hashes).
7
+ *
8
+ * Entropy scale (base-2):
9
+ * - 0-2: Low entropy (repeated chars, simple patterns)
10
+ * - 2-3.5: Medium entropy (English text, simple passwords)
11
+ * - 3.5-4.5: High entropy (mixed alphanumeric, potential secrets)
12
+ * - 4.5+: Very high entropy (cryptographic-grade randomness)
13
+ *
14
+ * Created: Phase 1.5, Week 1
15
+ * Date: January 7, 2026
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.calculateEntropy = calculateEntropy;
19
+ exports.hasHighEntropy = hasHighEntropy;
20
+ exports.calculateEntropyBreakdown = calculateEntropyBreakdown;
21
+ exports.isCryptographicSecret = isCryptographicSecret;
22
+ /**
23
+ * Calculate Shannon entropy of a string
24
+ *
25
+ * @param str - String to analyze
26
+ * @returns Entropy value (0-8, where 8 is maximum for base-256)
27
+ */
28
+ function calculateEntropy(str) {
29
+ if (!str || str.length === 0) {
30
+ return 0;
31
+ }
32
+ // Count character frequencies
33
+ const frequencies = new Map();
34
+ for (const char of str) {
35
+ frequencies.set(char, (frequencies.get(char) || 0) + 1);
36
+ }
37
+ // Calculate Shannon entropy: H = -Σ(p(x) * log2(p(x)))
38
+ let entropy = 0;
39
+ const length = str.length;
40
+ for (const count of frequencies.values()) {
41
+ const probability = count / length;
42
+ entropy -= probability * Math.log2(probability);
43
+ }
44
+ return entropy;
45
+ }
46
+ /**
47
+ * Check if string has high entropy (likely random/cryptographic)
48
+ *
49
+ * @param str - String to analyze
50
+ * @param threshold - Entropy threshold (default 4.0)
51
+ * @returns True if entropy exceeds threshold
52
+ */
53
+ function hasHighEntropy(str, threshold = 4.0) {
54
+ return calculateEntropy(str) >= threshold;
55
+ }
56
+ /**
57
+ * Calculate entropy for each character type separately
58
+ * Useful for detecting mixed-case alphanumeric secrets
59
+ *
60
+ * @param str - String to analyze
61
+ * @returns Object with entropy breakdown
62
+ */
63
+ function calculateEntropyBreakdown(str) {
64
+ const lowercase = str.replace(/[^a-z]/g, '');
65
+ const uppercase = str.replace(/[^A-Z]/g, '');
66
+ const digits = str.replace(/[^0-9]/g, '');
67
+ const symbols = str.replace(/[a-zA-Z0-9]/g, '');
68
+ return {
69
+ overall: calculateEntropy(str),
70
+ lowercase: calculateEntropy(lowercase),
71
+ uppercase: calculateEntropy(uppercase),
72
+ digits: calculateEntropy(digits),
73
+ symbols: calculateEntropy(symbols),
74
+ };
75
+ }
76
+ /**
77
+ * Detect if string has cryptographic-grade randomness
78
+ * Uses multiple heuristics:
79
+ * - High overall entropy (>4.5)
80
+ * - Mixed character types (uppercase, lowercase, digits)
81
+ * - Length >= 20 characters
82
+ *
83
+ * @param str - String to analyze
84
+ * @returns True if likely cryptographic secret
85
+ */
86
+ function isCryptographicSecret(str) {
87
+ if (str.length < 20) {
88
+ return false; // Too short for most API keys
89
+ }
90
+ const entropy = calculateEntropy(str);
91
+ if (entropy < 4.5) {
92
+ return false; // Not random enough
93
+ }
94
+ // Check for mixed character types
95
+ const hasLowercase = /[a-z]/.test(str);
96
+ const hasUppercase = /[A-Z]/.test(str);
97
+ const hasDigits = /[0-9]/.test(str);
98
+ // Cryptographic secrets typically have at least 2 character types
99
+ const typeCount = [hasLowercase, hasUppercase, hasDigits].filter(Boolean).length;
100
+ return typeCount >= 2;
101
+ }
102
+ //# sourceMappingURL=entropy-checker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entropy-checker.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/secrets/validators/entropy-checker.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;AAQH,4CAqBC;AASD,wCAEC;AASD,8DAmBC;AAYD,sDAmBC;AAjGD;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,GAAW;IAC1C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,8BAA8B;IAC9B,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,uDAAuD;IACvD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAE1B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,CAAC;QACnC,OAAO,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,cAAc,CAAC,GAAW,EAAE,YAAoB,GAAG;IACjE,OAAO,gBAAgB,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;AAC5C,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,yBAAyB,CAAC,GAAW;IAOnD,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAEhD,OAAO;QACL,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC;QAC9B,SAAS,EAAE,gBAAgB,CAAC,SAAS,CAAC;QACtC,SAAS,EAAE,gBAAgB,CAAC,SAAS,CAAC;QACtC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC;QAChC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC;KACnC,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,qBAAqB,CAAC,GAAW;IAC/C,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC,CAAC,8BAA8B;IAC9C,CAAC;IAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC,CAAC,oBAAoB;IACpC,CAAC;IAED,kCAAkC;IAClC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEpC,kEAAkE;IAClE,MAAM,SAAS,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAEjF,OAAO,SAAS,IAAI,CAAC,CAAC;AACxB,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * ES6+ Security Checks Module
3
+ *
4
+ * Security vulnerability detection for ES6+ JavaScript patterns.
5
+ * Detects prototype pollution, URL injection, and template literal injection.
6
+ *
7
+ * @module es6-security
8
+ */
9
+ import { SecurityVulnerability } from '../types';
10
+ export type CreateVulnerabilityFn = (category: string, message: string, suggestion: string, line: number, description: string, exploitExample: string, realWorldImpact: string[], before: string, after: string, explanation: string) => SecurityVulnerability;
11
+ /**
12
+ * Detects Object.assign() with user input (prototype pollution risk)
13
+ *
14
+ * @param line - The code line to check
15
+ * @param lineNumber - The line number
16
+ * @param createVulnerability - Function to create vulnerability object
17
+ * @returns SecurityVulnerability if detected, null otherwise
18
+ */
19
+ export declare function detectPrototypePollution(line: string, lineNumber: number, createVulnerability: CreateVulnerabilityFn): SecurityVulnerability | null;
20
+ /**
21
+ * Detects unsafe URL() constructor with user input (SSRF/open redirect risk)
22
+ *
23
+ * @param line - The code line to check
24
+ * @param lineNumber - The line number
25
+ * @param createVulnerability - Function to create vulnerability object
26
+ * @returns SecurityVulnerability if detected, null otherwise
27
+ */
28
+ export declare function detectURLInjection(line: string, lineNumber: number, createVulnerability: CreateVulnerabilityFn): SecurityVulnerability | null;
29
+ /**
30
+ * Detects template literal injection (SQL/command/HTML injection)
31
+ *
32
+ * @param line - The code line to check
33
+ * @param lineNumber - The line number
34
+ * @param createVulnerability - Function to create vulnerability object
35
+ * @returns SecurityVulnerability if detected, null otherwise
36
+ */
37
+ export declare function detectTemplateLiteralInjection(line: string, lineNumber: number, createVulnerability: CreateVulnerabilityFn): SecurityVulnerability | null;
38
+ //# sourceMappingURL=es6-security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es6-security.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/analyzers/security-checks/es6-security.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjD,MAAM,MAAM,qBAAqB,GAAG,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,EAAE,EACzB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,KAChB,qBAAqB,CAAC;AAE3B;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,mBAAmB,EAAE,qBAAqB,GACzC,qBAAqB,GAAG,IAAI,CAmC9B;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,mBAAmB,EAAE,qBAAqB,GACzC,qBAAqB,GAAG,IAAI,CAwB9B;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,mBAAmB,EAAE,qBAAqB,GACzC,qBAAqB,GAAG,IAAI,CAqE9B"}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ /**
3
+ * ES6+ Security Checks Module
4
+ *
5
+ * Security vulnerability detection for ES6+ JavaScript patterns.
6
+ * Detects prototype pollution, URL injection, and template literal injection.
7
+ *
8
+ * @module es6-security
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.detectPrototypePollution = detectPrototypePollution;
12
+ exports.detectURLInjection = detectURLInjection;
13
+ exports.detectTemplateLiteralInjection = detectTemplateLiteralInjection;
14
+ /**
15
+ * Detects Object.assign() with user input (prototype pollution risk)
16
+ *
17
+ * @param line - The code line to check
18
+ * @param lineNumber - The line number
19
+ * @param createVulnerability - Function to create vulnerability object
20
+ * @returns SecurityVulnerability if detected, null otherwise
21
+ */
22
+ function detectPrototypePollution(line, lineNumber, createVulnerability) {
23
+ const trimmed = line.trim();
24
+ if (trimmed.includes('Object.assign') && trimmed.match(/Object\.assign\s*\(\s*\w+/)) {
25
+ // Check if assigning from user input (with or without dot notation)
26
+ // Match: req.body, params, query, userInput, props.data, etc.
27
+ const hasUserInput = trimmed.match(/Object\.assign\s*\(\s*\w+\s*,\s*(req\b|request\b|params\b|query\b|body\b|userInput\b|req\.|request\.|params\.|query\.|body\.|props\.)/);
28
+ // Exclude safe patterns: Object.assign({}, ...) or Object.assign with literals/defaults
29
+ const isFirstArgEmpty = trimmed.match(/Object\.assign\s*\(\s*{\s*}\s*,/);
30
+ const hasOnlyLiterals = trimmed.match(/Object\.assign\s*\([^)]*{[^}]*}[^)]*\)/);
31
+ const isSafePattern = trimmed.includes('defaults') || trimmed.includes('static') || trimmed.match(/Object\.assign\s*\(\s*{}\s*,\s*\w+\s*,\s*{/);
32
+ if (hasUserInput && !isFirstArgEmpty && !isSafePattern) {
33
+ return createVulnerability('prototype-pollution', 'Object.assign with user input can cause prototype pollution', 'Validate keys before assignment or use Object.create(null)', lineNumber, 'Object.assign() with user-controlled input can modify Object.prototype, affecting all objects in the application and leading to security vulnerabilities.', 'Object.assign(config, req.body) where req.body = {"__proto__": {"isAdmin": true}}', [
34
+ 'Prototype pollution attacks',
35
+ 'Privilege escalation',
36
+ 'Authentication bypass',
37
+ 'Remote code execution'
38
+ ], 'Object.assign(config, req.body);', 'const safeAssign = (target, source) => {\n const keys = Object.keys(source).filter(key => key !== "__proto__" && key !== "constructor" && key !== "prototype");\n keys.forEach(key => { target[key] = source[key]; });\n};\nsafeAssign(config, req.body);', 'Filter out __proto__, constructor, and prototype keys before using Object.assign() with user input');
39
+ }
40
+ }
41
+ return null;
42
+ }
43
+ /**
44
+ * Detects unsafe URL() constructor with user input (SSRF/open redirect risk)
45
+ *
46
+ * @param line - The code line to check
47
+ * @param lineNumber - The line number
48
+ * @param createVulnerability - Function to create vulnerability object
49
+ * @returns SecurityVulnerability if detected, null otherwise
50
+ */
51
+ function detectURLInjection(line, lineNumber, createVulnerability) {
52
+ const trimmed = line.trim();
53
+ if (trimmed.match(/new\s+URL\s*\(/) && trimmed.match(/new\s+URL\s*\(\s*[^)]*\b(req\.|request\.|params\.|query\.|userInput|props\.)/)) {
54
+ return createVulnerability('url-injection', 'Unsafe URL() constructor with user input', 'Validate URL origin or use URL parsing library', lineNumber, 'Creating URLs from user input can lead to SSRF attacks, open redirects, or accessing internal services that should not be exposed.', 'new URL(req.query.redirect) where redirect = "http://internal-admin.local/secrets"', [
55
+ 'Server-Side Request Forgery (SSRF)',
56
+ 'Open redirect attacks',
57
+ 'Access to internal services',
58
+ 'Information disclosure'
59
+ ], 'const url = new URL(req.query.redirect);', 'const allowedOrigins = ["https://example.com"];\nconst url = new URL(req.query.redirect);\nif (!allowedOrigins.includes(url.origin)) {\n throw new Error("Invalid redirect URL");\n}', 'Always validate URL origin against an allowlist before using URLs from user input');
60
+ }
61
+ return null;
62
+ }
63
+ /**
64
+ * Detects template literal injection (SQL/command/HTML injection)
65
+ *
66
+ * @param line - The code line to check
67
+ * @param lineNumber - The line number
68
+ * @param createVulnerability - Function to create vulnerability object
69
+ * @returns SecurityVulnerability if detected, null otherwise
70
+ */
71
+ function detectTemplateLiteralInjection(line, lineNumber, createVulnerability) {
72
+ const trimmed = line.trim();
73
+ // Pattern 1: Specific known user input patterns (original check)
74
+ const hasKnownUserInput = trimmed.match(/`[^`]*\$\{[^}]*\b(req\.|request\.|params\.|query\.|body\.|userInput|props\.|user\w*\b|filename\b)/);
75
+ // Pattern 2: HTML with ANY variable interpolation (IMPROVED - catches `<a href="${url}">`)
76
+ // Detects template literals that contain HTML tags AND variable interpolation
77
+ const hasHTMLWithVars = trimmed.match(/`[^`]*<\w+[^>]*>/) && trimmed.match(/\$\{[^}]+\}/);
78
+ if (hasKnownUserInput || hasHTMLWithVars) {
79
+ // Check if it's being used in dangerous contexts
80
+ const isDangerous = trimmed.includes('eval') ||
81
+ trimmed.includes('Function(') ||
82
+ trimmed.includes('innerHTML') ||
83
+ trimmed.includes('<script') ||
84
+ trimmed.match(/\b(SELECT|INSERT|UPDATE|DELETE|FROM|WHERE)\b/i) || // SQL
85
+ trimmed.match(/\b(exec|spawn|mysqldump|psql|bash|sh)\b/i) || // Command injection
86
+ trimmed.match(/<\w+[^>]*>/); // HTML injection
87
+ if (isDangerous) {
88
+ // Determine specific type
89
+ let type = 'template-injection';
90
+ let title = 'Template literal injection allows code/command execution';
91
+ let suggestion = 'Use parameterized queries or sanitize user input';
92
+ let explanation = 'Use parameterized queries for SQL, avoid eval/Function, sanitize HTML, validate command inputs';
93
+ if (trimmed.match(/\b(SELECT|INSERT|UPDATE|DELETE)\b/i)) {
94
+ type = 'sql-injection';
95
+ title = 'Template literal with user input in SQL query';
96
+ }
97
+ else if (trimmed.match(/\b(exec|spawn|mysqldump)\b/i)) {
98
+ type = 'command-injection';
99
+ title = 'Template literal with user input in command execution';
100
+ }
101
+ else if (trimmed.match(/<\w+[^>]*>/) && hasHTMLWithVars) {
102
+ // XSS via HTML template literal
103
+ type = 'xss';
104
+ title = 'XSS vulnerability in HTML template literal';
105
+ suggestion = 'Sanitize variables or use React\'s JSX (auto-escaped)';
106
+ explanation = 'When rendering HTML with template literals, all variables must be sanitized. Use DOMPurify or avoid template literals for HTML entirely.';
107
+ }
108
+ return createVulnerability(type, title, suggestion, lineNumber, 'Template literals with user input in SQL queries, commands, eval, or HTML contexts allow attackers to inject malicious code, leading to XSS, SQL injection, or command execution.', hasHTMLWithVars
109
+ ? '`<a href="${userInput}">Link</a>` allows XSS if userInput contains javascript:alert(1)'
110
+ : '`SELECT * FROM users WHERE id = ${userId}` allows SQL injection if userId is not validated', [
111
+ 'SQL injection',
112
+ 'Command injection',
113
+ 'Remote code execution',
114
+ 'XSS attacks',
115
+ 'Data exfiltration'
116
+ ], hasHTMLWithVars
117
+ ? 'return `<a href="${url}">Click here</a>`;'
118
+ : 'const query = `SELECT * FROM users WHERE id = ${userId}`;', hasHTMLWithVars
119
+ ? '// Option 1: Sanitize URL\nimport DOMPurify from "dompurify";\nconst safeUrl = DOMPurify.sanitize(url, {ALLOWED_URI_REGEXP: /^https?:/});\nreturn `<a href="${safeUrl}">Click here</a>`;\n\n// Option 2: Use React JSX (auto-escaped)\nreturn <a href={url}>Click here</a>;'
120
+ : 'const query = "SELECT * FROM users WHERE id = ?";\ndb.query(query, [userId]); // Parameterized query', explanation);
121
+ }
122
+ }
123
+ return null;
124
+ }
125
+ //# sourceMappingURL=es6-security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es6-security.js","sourceRoot":"","sources":["../../../../../../../src/lib/analyzers/security-checks/es6-security.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Python Async/Await Security Checks Module
3
+ *
4
+ * Security vulnerability detection for Python async/await patterns.
5
+ * Detects missing await keywords and asyncio.run() misuse.
6
+ *
7
+ * @module python-async-security
8
+ */
9
+ import { SecurityVulnerability } from '../types';
10
+ export type CreateVulnerabilityFn = (category: string, message: string, suggestion: string, line: number, description: string, exploitExample: string, realWorldImpact: string[], before: string, after: string, explanation: string) => SecurityVulnerability;
11
+ /**
12
+ * Check if line starts an async function definition
13
+ *
14
+ * @param line - The code line to check
15
+ * @returns true if line starts async function
16
+ */
17
+ export declare function isAsyncFunctionStart(line: string): boolean;
18
+ /**
19
+ * Check if line ends async function context (dedent back to module level)
20
+ *
21
+ * @param line - The code line to check
22
+ * @param prevIndent - Previous function body indent level
23
+ * @returns true if async context should end
24
+ */
25
+ export declare function isAsyncFunctionEnd(line: string, prevIndent: number): boolean;
26
+ /**
27
+ * Detect missing await on async function calls
28
+ *
29
+ * @param line - The code line to check
30
+ * @param lineNumber - The line number
31
+ * @param inAsyncContext - Whether we're inside an async function
32
+ * @param createVulnerability - Function to create vulnerability object
33
+ * @returns SecurityVulnerability if detected, null otherwise
34
+ */
35
+ export declare function detectMissingAwait(line: string, lineNumber: number, inAsyncContext: boolean, createVulnerability: CreateVulnerabilityFn): SecurityVulnerability | null;
36
+ /**
37
+ * Detect asyncio.run() called inside async function
38
+ *
39
+ * @param line - The code line to check
40
+ * @param lineNumber - The line number
41
+ * @param inAsyncContext - Whether we're inside an async function
42
+ * @param createVulnerability - Function to create vulnerability object
43
+ * @returns SecurityVulnerability if detected, null otherwise
44
+ */
45
+ export declare function detectAsyncioRunMisuse(line: string, lineNumber: number, inAsyncContext: boolean, createVulnerability: CreateVulnerabilityFn): SecurityVulnerability | null;
46
+ //# sourceMappingURL=python-async-security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-async-security.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/analyzers/security-checks/python-async-security.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjD,MAAM,MAAM,qBAAqB,GAAG,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,EAAE,EACzB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,KAChB,qBAAqB,CAAC;AAE3B;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAY5E;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,OAAO,EACvB,mBAAmB,EAAE,qBAAqB,GACzC,qBAAqB,GAAG,IAAI,CAgC9B;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,OAAO,EACvB,mBAAmB,EAAE,qBAAqB,GACzC,qBAAqB,GAAG,IAAI,CAwB9B"}