secure-scan 1.2.2

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 (569) hide show
  1. package/README.md +564 -0
  2. package/dist/ai/aiAnalyzer.d.ts +99 -0
  3. package/dist/ai/aiAnalyzer.d.ts.map +1 -0
  4. package/dist/ai/aiAnalyzer.js +669 -0
  5. package/dist/ai/aiAnalyzer.js.map +1 -0
  6. package/dist/ai/index.d.ts +5 -0
  7. package/dist/ai/index.d.ts.map +1 -0
  8. package/dist/ai/index.js +21 -0
  9. package/dist/ai/index.js.map +1 -0
  10. package/dist/analyzers/base/baseAnalyzer.d.ts +44 -0
  11. package/dist/analyzers/base/baseAnalyzer.d.ts.map +1 -0
  12. package/dist/analyzers/base/baseAnalyzer.js +53 -0
  13. package/dist/analyzers/base/baseAnalyzer.js.map +1 -0
  14. package/dist/analyzers/base/index.d.ts +5 -0
  15. package/dist/analyzers/base/index.d.ts.map +1 -0
  16. package/dist/analyzers/base/index.js +21 -0
  17. package/dist/analyzers/base/index.js.map +1 -0
  18. package/dist/analyzers/c-cpp/cppAnalyzer.d.ts +60 -0
  19. package/dist/analyzers/c-cpp/cppAnalyzer.d.ts.map +1 -0
  20. package/dist/analyzers/c-cpp/cppAnalyzer.js +218 -0
  21. package/dist/analyzers/c-cpp/cppAnalyzer.js.map +1 -0
  22. package/dist/analyzers/c-cpp/index.d.ts +5 -0
  23. package/dist/analyzers/c-cpp/index.d.ts.map +1 -0
  24. package/dist/analyzers/c-cpp/index.js +21 -0
  25. package/dist/analyzers/c-cpp/index.js.map +1 -0
  26. package/dist/analyzers/core/engine/index.d.ts +5 -0
  27. package/dist/analyzers/core/engine/index.d.ts.map +1 -0
  28. package/dist/analyzers/core/engine/index.js +21 -0
  29. package/dist/analyzers/core/engine/index.js.map +1 -0
  30. package/dist/analyzers/core/engine/ruleEngine.d.ts +46 -0
  31. package/dist/analyzers/core/engine/ruleEngine.d.ts.map +1 -0
  32. package/dist/analyzers/core/engine/ruleEngine.js +173 -0
  33. package/dist/analyzers/core/engine/ruleEngine.js.map +1 -0
  34. package/dist/analyzers/core/index.d.ts +8 -0
  35. package/dist/analyzers/core/index.d.ts.map +1 -0
  36. package/dist/analyzers/core/index.js +24 -0
  37. package/dist/analyzers/core/index.js.map +1 -0
  38. package/dist/analyzers/core/scanner/fileScanner.d.ts +31 -0
  39. package/dist/analyzers/core/scanner/fileScanner.d.ts.map +1 -0
  40. package/dist/analyzers/core/scanner/fileScanner.js +199 -0
  41. package/dist/analyzers/core/scanner/fileScanner.js.map +1 -0
  42. package/dist/analyzers/core/scanner/index.d.ts +5 -0
  43. package/dist/analyzers/core/scanner/index.d.ts.map +1 -0
  44. package/dist/analyzers/core/scanner/index.js +21 -0
  45. package/dist/analyzers/core/scanner/index.js.map +1 -0
  46. package/dist/analyzers/core/scoring/index.d.ts +5 -0
  47. package/dist/analyzers/core/scoring/index.d.ts.map +1 -0
  48. package/dist/analyzers/core/scoring/index.js +21 -0
  49. package/dist/analyzers/core/scoring/index.js.map +1 -0
  50. package/dist/analyzers/core/scoring/riskScoring.d.ts +49 -0
  51. package/dist/analyzers/core/scoring/riskScoring.d.ts.map +1 -0
  52. package/dist/analyzers/core/scoring/riskScoring.js +180 -0
  53. package/dist/analyzers/core/scoring/riskScoring.js.map +1 -0
  54. package/dist/analyzers/core/securityScanner.d.ts +47 -0
  55. package/dist/analyzers/core/securityScanner.d.ts.map +1 -0
  56. package/dist/analyzers/core/securityScanner.js +298 -0
  57. package/dist/analyzers/core/securityScanner.js.map +1 -0
  58. package/dist/analyzers/csharp/csharpAnalyzer.d.ts +64 -0
  59. package/dist/analyzers/csharp/csharpAnalyzer.d.ts.map +1 -0
  60. package/dist/analyzers/csharp/csharpAnalyzer.js +232 -0
  61. package/dist/analyzers/csharp/csharpAnalyzer.js.map +1 -0
  62. package/dist/analyzers/csharp/index.d.ts +5 -0
  63. package/dist/analyzers/csharp/index.d.ts.map +1 -0
  64. package/dist/analyzers/csharp/index.js +21 -0
  65. package/dist/analyzers/csharp/index.js.map +1 -0
  66. package/dist/analyzers/iac/iacAnalyzer.d.ts +36 -0
  67. package/dist/analyzers/iac/iacAnalyzer.d.ts.map +1 -0
  68. package/dist/analyzers/iac/iacAnalyzer.js +182 -0
  69. package/dist/analyzers/iac/iacAnalyzer.js.map +1 -0
  70. package/dist/analyzers/iac/index.d.ts +5 -0
  71. package/dist/analyzers/iac/index.d.ts.map +1 -0
  72. package/dist/analyzers/iac/index.js +21 -0
  73. package/dist/analyzers/iac/index.js.map +1 -0
  74. package/dist/analyzers/index.d.ts +30 -0
  75. package/dist/analyzers/index.d.ts.map +1 -0
  76. package/dist/analyzers/index.js +80 -0
  77. package/dist/analyzers/index.js.map +1 -0
  78. package/dist/analyzers/java/index.d.ts +5 -0
  79. package/dist/analyzers/java/index.d.ts.map +1 -0
  80. package/dist/analyzers/java/index.js +21 -0
  81. package/dist/analyzers/java/index.js.map +1 -0
  82. package/dist/analyzers/java/javaAnalyzer.d.ts +64 -0
  83. package/dist/analyzers/java/javaAnalyzer.d.ts.map +1 -0
  84. package/dist/analyzers/java/javaAnalyzer.js +224 -0
  85. package/dist/analyzers/java/javaAnalyzer.js.map +1 -0
  86. package/dist/analyzers/javascript/astUtils.d.ts +170 -0
  87. package/dist/analyzers/javascript/astUtils.d.ts.map +1 -0
  88. package/dist/analyzers/javascript/astUtils.js +700 -0
  89. package/dist/analyzers/javascript/astUtils.js.map +1 -0
  90. package/dist/analyzers/javascript/index.d.ts +18 -0
  91. package/dist/analyzers/javascript/index.d.ts.map +1 -0
  92. package/dist/analyzers/javascript/index.js +50 -0
  93. package/dist/analyzers/javascript/index.js.map +1 -0
  94. package/dist/analyzers/javascript/javascriptAnalyzer.d.ts +111 -0
  95. package/dist/analyzers/javascript/javascriptAnalyzer.d.ts.map +1 -0
  96. package/dist/analyzers/javascript/javascriptAnalyzer.js +860 -0
  97. package/dist/analyzers/javascript/javascriptAnalyzer.js.map +1 -0
  98. package/dist/analyzers/javascript/malwareDetector.d.ts +102 -0
  99. package/dist/analyzers/javascript/malwareDetector.d.ts.map +1 -0
  100. package/dist/analyzers/javascript/malwareDetector.js +616 -0
  101. package/dist/analyzers/javascript/malwareDetector.js.map +1 -0
  102. package/dist/analyzers/javascript/packageJsonAnalyzer.d.ts +87 -0
  103. package/dist/analyzers/javascript/packageJsonAnalyzer.d.ts.map +1 -0
  104. package/dist/analyzers/javascript/packageJsonAnalyzer.js +553 -0
  105. package/dist/analyzers/javascript/packageJsonAnalyzer.js.map +1 -0
  106. package/dist/analyzers/javascript/taintAnalyzer.d.ts +120 -0
  107. package/dist/analyzers/javascript/taintAnalyzer.d.ts.map +1 -0
  108. package/dist/analyzers/javascript/taintAnalyzer.js +526 -0
  109. package/dist/analyzers/javascript/taintAnalyzer.js.map +1 -0
  110. package/dist/analyzers/php/index.d.ts +5 -0
  111. package/dist/analyzers/php/index.d.ts.map +1 -0
  112. package/dist/analyzers/php/index.js +21 -0
  113. package/dist/analyzers/php/index.js.map +1 -0
  114. package/dist/analyzers/php/phpAnalyzer.d.ts +56 -0
  115. package/dist/analyzers/php/phpAnalyzer.d.ts.map +1 -0
  116. package/dist/analyzers/php/phpAnalyzer.js +202 -0
  117. package/dist/analyzers/php/phpAnalyzer.js.map +1 -0
  118. package/dist/analyzers/python/index.d.ts +5 -0
  119. package/dist/analyzers/python/index.d.ts.map +1 -0
  120. package/dist/analyzers/python/index.js +21 -0
  121. package/dist/analyzers/python/index.js.map +1 -0
  122. package/dist/analyzers/python/pythonAnalyzer.d.ts +64 -0
  123. package/dist/analyzers/python/pythonAnalyzer.d.ts.map +1 -0
  124. package/dist/analyzers/python/pythonAnalyzer.js +226 -0
  125. package/dist/analyzers/python/pythonAnalyzer.js.map +1 -0
  126. package/dist/cli/index.d.ts +7 -0
  127. package/dist/cli/index.d.ts.map +1 -0
  128. package/dist/cli/index.js +281 -0
  129. package/dist/cli/index.js.map +1 -0
  130. package/dist/core/engine/index.d.ts +5 -0
  131. package/dist/core/engine/index.d.ts.map +1 -0
  132. package/dist/core/engine/index.js +21 -0
  133. package/dist/core/engine/index.js.map +1 -0
  134. package/dist/core/engine/ruleEngine.d.ts +46 -0
  135. package/dist/core/engine/ruleEngine.d.ts.map +1 -0
  136. package/dist/core/engine/ruleEngine.js +173 -0
  137. package/dist/core/engine/ruleEngine.js.map +1 -0
  138. package/dist/core/index.d.ts +8 -0
  139. package/dist/core/index.d.ts.map +1 -0
  140. package/dist/core/index.js +24 -0
  141. package/dist/core/index.js.map +1 -0
  142. package/dist/core/scanner/fileScanner.d.ts +31 -0
  143. package/dist/core/scanner/fileScanner.d.ts.map +1 -0
  144. package/dist/core/scanner/fileScanner.js +199 -0
  145. package/dist/core/scanner/fileScanner.js.map +1 -0
  146. package/dist/core/scanner/index.d.ts +5 -0
  147. package/dist/core/scanner/index.d.ts.map +1 -0
  148. package/dist/core/scanner/index.js +21 -0
  149. package/dist/core/scanner/index.js.map +1 -0
  150. package/dist/core/scoring/index.d.ts +5 -0
  151. package/dist/core/scoring/index.d.ts.map +1 -0
  152. package/dist/core/scoring/index.js +21 -0
  153. package/dist/core/scoring/index.js.map +1 -0
  154. package/dist/core/scoring/riskScoring.d.ts +49 -0
  155. package/dist/core/scoring/riskScoring.d.ts.map +1 -0
  156. package/dist/core/scoring/riskScoring.js +180 -0
  157. package/dist/core/scoring/riskScoring.js.map +1 -0
  158. package/dist/core/securityScanner.d.ts +47 -0
  159. package/dist/core/securityScanner.d.ts.map +1 -0
  160. package/dist/core/securityScanner.js +298 -0
  161. package/dist/core/securityScanner.js.map +1 -0
  162. package/dist/dependencies/aiDependencyAnalyzer.d.ts +96 -0
  163. package/dist/dependencies/aiDependencyAnalyzer.d.ts.map +1 -0
  164. package/dist/dependencies/aiDependencyAnalyzer.js +435 -0
  165. package/dist/dependencies/aiDependencyAnalyzer.js.map +1 -0
  166. package/dist/dependencies/database/cveDatabase.d.ts +32 -0
  167. package/dist/dependencies/database/cveDatabase.d.ts.map +1 -0
  168. package/dist/dependencies/database/cveDatabase.js +393 -0
  169. package/dist/dependencies/database/cveDatabase.js.map +1 -0
  170. package/dist/dependencies/database/index.d.ts +6 -0
  171. package/dist/dependencies/database/index.d.ts.map +1 -0
  172. package/dist/dependencies/database/index.js +22 -0
  173. package/dist/dependencies/database/index.js.map +1 -0
  174. package/dist/dependencies/database/maliciousPackages.d.ts +43 -0
  175. package/dist/dependencies/database/maliciousPackages.d.ts.map +1 -0
  176. package/dist/dependencies/database/maliciousPackages.js +279 -0
  177. package/dist/dependencies/database/maliciousPackages.js.map +1 -0
  178. package/dist/dependencies/dependencyAnalyzer.d.ts +74 -0
  179. package/dist/dependencies/dependencyAnalyzer.d.ts.map +1 -0
  180. package/dist/dependencies/dependencyAnalyzer.js +349 -0
  181. package/dist/dependencies/dependencyAnalyzer.js.map +1 -0
  182. package/dist/dependencies/detectors/index.d.ts +7 -0
  183. package/dist/dependencies/detectors/index.d.ts.map +1 -0
  184. package/dist/dependencies/detectors/index.js +28 -0
  185. package/dist/dependencies/detectors/index.js.map +1 -0
  186. package/dist/dependencies/detectors/securityStandards.d.ts +15 -0
  187. package/dist/dependencies/detectors/securityStandards.d.ts.map +1 -0
  188. package/dist/dependencies/detectors/securityStandards.js +178 -0
  189. package/dist/dependencies/detectors/securityStandards.js.map +1 -0
  190. package/dist/dependencies/detectors/vulnerabilityDetector.d.ts +53 -0
  191. package/dist/dependencies/detectors/vulnerabilityDetector.d.ts.map +1 -0
  192. package/dist/dependencies/detectors/vulnerabilityDetector.js +289 -0
  193. package/dist/dependencies/detectors/vulnerabilityDetector.js.map +1 -0
  194. package/dist/dependencies/index.d.ts +14 -0
  195. package/dist/dependencies/index.d.ts.map +1 -0
  196. package/dist/dependencies/index.js +43 -0
  197. package/dist/dependencies/index.js.map +1 -0
  198. package/dist/dependencies/installed/index.d.ts +8 -0
  199. package/dist/dependencies/installed/index.d.ts.map +1 -0
  200. package/dist/dependencies/installed/index.js +24 -0
  201. package/dist/dependencies/installed/index.js.map +1 -0
  202. package/dist/dependencies/installed/installedScanner.d.ts +91 -0
  203. package/dist/dependencies/installed/installedScanner.d.ts.map +1 -0
  204. package/dist/dependencies/installed/installedScanner.js +766 -0
  205. package/dist/dependencies/installed/installedScanner.js.map +1 -0
  206. package/dist/dependencies/installed/malwarePatterns.d.ts +32 -0
  207. package/dist/dependencies/installed/malwarePatterns.d.ts.map +1 -0
  208. package/dist/dependencies/installed/malwarePatterns.js +480 -0
  209. package/dist/dependencies/installed/malwarePatterns.js.map +1 -0
  210. package/dist/dependencies/installed/types.d.ts +274 -0
  211. package/dist/dependencies/installed/types.d.ts.map +1 -0
  212. package/dist/dependencies/installed/types.js +7 -0
  213. package/dist/dependencies/installed/types.js.map +1 -0
  214. package/dist/dependencies/parsers/base/baseParser.d.ts +44 -0
  215. package/dist/dependencies/parsers/base/baseParser.d.ts.map +1 -0
  216. package/dist/dependencies/parsers/base/baseParser.js +80 -0
  217. package/dist/dependencies/parsers/base/baseParser.js.map +1 -0
  218. package/dist/dependencies/parsers/base/index.d.ts +6 -0
  219. package/dist/dependencies/parsers/base/index.d.ts.map +1 -0
  220. package/dist/dependencies/parsers/base/index.js +27 -0
  221. package/dist/dependencies/parsers/base/index.js.map +1 -0
  222. package/dist/dependencies/parsers/cpp/cppParser.d.ts +36 -0
  223. package/dist/dependencies/parsers/cpp/cppParser.d.ts.map +1 -0
  224. package/dist/dependencies/parsers/cpp/cppParser.js +196 -0
  225. package/dist/dependencies/parsers/cpp/cppParser.js.map +1 -0
  226. package/dist/dependencies/parsers/cpp/index.d.ts +6 -0
  227. package/dist/dependencies/parsers/cpp/index.d.ts.map +1 -0
  228. package/dist/dependencies/parsers/cpp/index.js +27 -0
  229. package/dist/dependencies/parsers/cpp/index.js.map +1 -0
  230. package/dist/dependencies/parsers/csharp/csharpParser.d.ts +32 -0
  231. package/dist/dependencies/parsers/csharp/csharpParser.d.ts.map +1 -0
  232. package/dist/dependencies/parsers/csharp/csharpParser.js +125 -0
  233. package/dist/dependencies/parsers/csharp/csharpParser.js.map +1 -0
  234. package/dist/dependencies/parsers/csharp/index.d.ts +6 -0
  235. package/dist/dependencies/parsers/csharp/index.d.ts.map +1 -0
  236. package/dist/dependencies/parsers/csharp/index.js +27 -0
  237. package/dist/dependencies/parsers/csharp/index.js.map +1 -0
  238. package/dist/dependencies/parsers/index.d.ts +24 -0
  239. package/dist/dependencies/parsers/index.d.ts.map +1 -0
  240. package/dist/dependencies/parsers/index.js +69 -0
  241. package/dist/dependencies/parsers/index.js.map +1 -0
  242. package/dist/dependencies/parsers/java/index.d.ts +6 -0
  243. package/dist/dependencies/parsers/java/index.d.ts.map +1 -0
  244. package/dist/dependencies/parsers/java/index.js +27 -0
  245. package/dist/dependencies/parsers/java/index.js.map +1 -0
  246. package/dist/dependencies/parsers/java/javaParser.d.ts +32 -0
  247. package/dist/dependencies/parsers/java/javaParser.d.ts.map +1 -0
  248. package/dist/dependencies/parsers/java/javaParser.js +168 -0
  249. package/dist/dependencies/parsers/java/javaParser.js.map +1 -0
  250. package/dist/dependencies/parsers/javascript/index.d.ts +6 -0
  251. package/dist/dependencies/parsers/javascript/index.d.ts.map +1 -0
  252. package/dist/dependencies/parsers/javascript/index.js +27 -0
  253. package/dist/dependencies/parsers/javascript/index.js.map +1 -0
  254. package/dist/dependencies/parsers/javascript/javascriptParser.d.ts +55 -0
  255. package/dist/dependencies/parsers/javascript/javascriptParser.d.ts.map +1 -0
  256. package/dist/dependencies/parsers/javascript/javascriptParser.js +266 -0
  257. package/dist/dependencies/parsers/javascript/javascriptParser.js.map +1 -0
  258. package/dist/dependencies/parsers/php/index.d.ts +6 -0
  259. package/dist/dependencies/parsers/php/index.d.ts.map +1 -0
  260. package/dist/dependencies/parsers/php/index.js +27 -0
  261. package/dist/dependencies/parsers/php/index.js.map +1 -0
  262. package/dist/dependencies/parsers/php/phpParser.d.ts +35 -0
  263. package/dist/dependencies/parsers/php/phpParser.d.ts.map +1 -0
  264. package/dist/dependencies/parsers/php/phpParser.js +162 -0
  265. package/dist/dependencies/parsers/php/phpParser.js.map +1 -0
  266. package/dist/dependencies/parsers/python/index.d.ts +6 -0
  267. package/dist/dependencies/parsers/python/index.d.ts.map +1 -0
  268. package/dist/dependencies/parsers/python/index.js +27 -0
  269. package/dist/dependencies/parsers/python/index.js.map +1 -0
  270. package/dist/dependencies/parsers/python/pythonParser.d.ts +60 -0
  271. package/dist/dependencies/parsers/python/pythonParser.d.ts.map +1 -0
  272. package/dist/dependencies/parsers/python/pythonParser.js +336 -0
  273. package/dist/dependencies/parsers/python/pythonParser.js.map +1 -0
  274. package/dist/dependencies/types.d.ts +280 -0
  275. package/dist/dependencies/types.d.ts.map +1 -0
  276. package/dist/dependencies/types.js +59 -0
  277. package/dist/dependencies/types.js.map +1 -0
  278. package/dist/i18n/index.d.ts +2 -0
  279. package/dist/i18n/index.d.ts.map +1 -0
  280. package/dist/i18n/index.js +18 -0
  281. package/dist/i18n/index.js.map +1 -0
  282. package/dist/i18n/translations.d.ts +55 -0
  283. package/dist/i18n/translations.d.ts.map +1 -0
  284. package/dist/i18n/translations.js +119 -0
  285. package/dist/i18n/translations.js.map +1 -0
  286. package/dist/index.d.ts +14 -0
  287. package/dist/index.d.ts.map +1 -0
  288. package/dist/index.js +36 -0
  289. package/dist/index.js.map +1 -0
  290. package/dist/reports/dependencyReportGenerator.d.ts +20 -0
  291. package/dist/reports/dependencyReportGenerator.d.ts.map +1 -0
  292. package/dist/reports/dependencyReportGenerator.js +690 -0
  293. package/dist/reports/dependencyReportGenerator.js.map +1 -0
  294. package/dist/reports/htmlReportGenerator.d.ts +43 -0
  295. package/dist/reports/htmlReportGenerator.d.ts.map +1 -0
  296. package/dist/reports/htmlReportGenerator.js +793 -0
  297. package/dist/reports/htmlReportGenerator.js.map +1 -0
  298. package/dist/reports/index.d.ts +7 -0
  299. package/dist/reports/index.d.ts.map +1 -0
  300. package/dist/reports/index.js +23 -0
  301. package/dist/reports/index.js.map +1 -0
  302. package/dist/reports/installedDepsReportGenerator.d.ts +14 -0
  303. package/dist/reports/installedDepsReportGenerator.d.ts.map +1 -0
  304. package/dist/reports/installedDepsReportGenerator.js +872 -0
  305. package/dist/reports/installedDepsReportGenerator.js.map +1 -0
  306. package/dist/rules/index.d.ts +31 -0
  307. package/dist/rules/index.d.ts.map +1 -0
  308. package/dist/rules/index.js +95 -0
  309. package/dist/rules/index.js.map +1 -0
  310. package/dist/rules/malware/categories/backdoors.d.ts +12 -0
  311. package/dist/rules/malware/categories/backdoors.d.ts.map +1 -0
  312. package/dist/rules/malware/categories/backdoors.js +163 -0
  313. package/dist/rules/malware/categories/backdoors.js.map +1 -0
  314. package/dist/rules/malware/categories/cryptominers.d.ts +13 -0
  315. package/dist/rules/malware/categories/cryptominers.d.ts.map +1 -0
  316. package/dist/rules/malware/categories/cryptominers.js +415 -0
  317. package/dist/rules/malware/categories/cryptominers.js.map +1 -0
  318. package/dist/rules/malware/categories/exfiltration.d.ts +20 -0
  319. package/dist/rules/malware/categories/exfiltration.d.ts.map +1 -0
  320. package/dist/rules/malware/categories/exfiltration.js +658 -0
  321. package/dist/rules/malware/categories/exfiltration.js.map +1 -0
  322. package/dist/rules/malware/categories/keyloggers.d.ts +19 -0
  323. package/dist/rules/malware/categories/keyloggers.d.ts.map +1 -0
  324. package/dist/rules/malware/categories/keyloggers.js +763 -0
  325. package/dist/rules/malware/categories/keyloggers.js.map +1 -0
  326. package/dist/rules/malware/categories/loaders.d.ts +20 -0
  327. package/dist/rules/malware/categories/loaders.d.ts.map +1 -0
  328. package/dist/rules/malware/categories/loaders.js +702 -0
  329. package/dist/rules/malware/categories/loaders.js.map +1 -0
  330. package/dist/rules/malware/categories/network.d.ts +19 -0
  331. package/dist/rules/malware/categories/network.d.ts.map +1 -0
  332. package/dist/rules/malware/categories/network.js +622 -0
  333. package/dist/rules/malware/categories/network.js.map +1 -0
  334. package/dist/rules/malware/categories/obfuscation.d.ts +22 -0
  335. package/dist/rules/malware/categories/obfuscation.d.ts.map +1 -0
  336. package/dist/rules/malware/categories/obfuscation.js +766 -0
  337. package/dist/rules/malware/categories/obfuscation.js.map +1 -0
  338. package/dist/rules/malware/constants/index.d.ts +281 -0
  339. package/dist/rules/malware/constants/index.d.ts.map +1 -0
  340. package/dist/rules/malware/constants/index.js +327 -0
  341. package/dist/rules/malware/constants/index.js.map +1 -0
  342. package/dist/rules/malware/engine/index.d.ts +178 -0
  343. package/dist/rules/malware/engine/index.d.ts.map +1 -0
  344. package/dist/rules/malware/engine/index.js +552 -0
  345. package/dist/rules/malware/engine/index.js.map +1 -0
  346. package/dist/rules/malware/index.d.ts +205 -0
  347. package/dist/rules/malware/index.d.ts.map +1 -0
  348. package/dist/rules/malware/index.js +837 -0
  349. package/dist/rules/malware/index.js.map +1 -0
  350. package/dist/rules/malware/scoring/index.d.ts +84 -0
  351. package/dist/rules/malware/scoring/index.d.ts.map +1 -0
  352. package/dist/rules/malware/scoring/index.js +441 -0
  353. package/dist/rules/malware/scoring/index.js.map +1 -0
  354. package/dist/rules/malware/types/index.d.ts +616 -0
  355. package/dist/rules/malware/types/index.d.ts.map +1 -0
  356. package/dist/rules/malware/types/index.js +155 -0
  357. package/dist/rules/malware/types/index.js.map +1 -0
  358. package/dist/rules/malware/utils/index.d.ts +117 -0
  359. package/dist/rules/malware/utils/index.d.ts.map +1 -0
  360. package/dist/rules/malware/utils/index.js +514 -0
  361. package/dist/rules/malware/utils/index.js.map +1 -0
  362. package/dist/rules/standards.d.ts +26 -0
  363. package/dist/rules/standards.d.ts.map +1 -0
  364. package/dist/rules/standards.js +352 -0
  365. package/dist/rules/standards.js.map +1 -0
  366. package/dist/rules/vulnerabilities/constants/index.d.ts +835 -0
  367. package/dist/rules/vulnerabilities/constants/index.d.ts.map +1 -0
  368. package/dist/rules/vulnerabilities/constants/index.js +544 -0
  369. package/dist/rules/vulnerabilities/constants/index.js.map +1 -0
  370. package/dist/rules/vulnerabilities/engine/index.d.ts +145 -0
  371. package/dist/rules/vulnerabilities/engine/index.d.ts.map +1 -0
  372. package/dist/rules/vulnerabilities/engine/index.js +581 -0
  373. package/dist/rules/vulnerabilities/engine/index.js.map +1 -0
  374. package/dist/rules/vulnerabilities/index.d.ts +148 -0
  375. package/dist/rules/vulnerabilities/index.d.ts.map +1 -0
  376. package/dist/rules/vulnerabilities/index.js +252 -0
  377. package/dist/rules/vulnerabilities/index.js.map +1 -0
  378. package/dist/rules/vulnerabilities/rules/authentication.d.ts +8 -0
  379. package/dist/rules/vulnerabilities/rules/authentication.d.ts.map +1 -0
  380. package/dist/rules/vulnerabilities/rules/authentication.js +419 -0
  381. package/dist/rules/vulnerabilities/rules/authentication.js.map +1 -0
  382. package/dist/rules/vulnerabilities/rules/commandInjection.d.ts +8 -0
  383. package/dist/rules/vulnerabilities/rules/commandInjection.d.ts.map +1 -0
  384. package/dist/rules/vulnerabilities/rules/commandInjection.js +300 -0
  385. package/dist/rules/vulnerabilities/rules/commandInjection.js.map +1 -0
  386. package/dist/rules/vulnerabilities/rules/csrf.d.ts +8 -0
  387. package/dist/rules/vulnerabilities/rules/csrf.d.ts.map +1 -0
  388. package/dist/rules/vulnerabilities/rules/csrf.js +261 -0
  389. package/dist/rules/vulnerabilities/rules/csrf.js.map +1 -0
  390. package/dist/rules/vulnerabilities/rules/deserialization.d.ts +8 -0
  391. package/dist/rules/vulnerabilities/rules/deserialization.d.ts.map +1 -0
  392. package/dist/rules/vulnerabilities/rules/deserialization.js +336 -0
  393. package/dist/rules/vulnerabilities/rules/deserialization.js.map +1 -0
  394. package/dist/rules/vulnerabilities/rules/fileUpload.d.ts +8 -0
  395. package/dist/rules/vulnerabilities/rules/fileUpload.d.ts.map +1 -0
  396. package/dist/rules/vulnerabilities/rules/fileUpload.js +325 -0
  397. package/dist/rules/vulnerabilities/rules/fileUpload.js.map +1 -0
  398. package/dist/rules/vulnerabilities/rules/hardcodedSecrets.d.ts +8 -0
  399. package/dist/rules/vulnerabilities/rules/hardcodedSecrets.d.ts.map +1 -0
  400. package/dist/rules/vulnerabilities/rules/hardcodedSecrets.js +446 -0
  401. package/dist/rules/vulnerabilities/rules/hardcodedSecrets.js.map +1 -0
  402. package/dist/rules/vulnerabilities/rules/index.d.ts +17 -0
  403. package/dist/rules/vulnerabilities/rules/index.d.ts.map +1 -0
  404. package/dist/rules/vulnerabilities/rules/index.js +47 -0
  405. package/dist/rules/vulnerabilities/rules/index.js.map +1 -0
  406. package/dist/rules/vulnerabilities/rules/pathTraversal.d.ts +8 -0
  407. package/dist/rules/vulnerabilities/rules/pathTraversal.d.ts.map +1 -0
  408. package/dist/rules/vulnerabilities/rules/pathTraversal.js +351 -0
  409. package/dist/rules/vulnerabilities/rules/pathTraversal.js.map +1 -0
  410. package/dist/rules/vulnerabilities/rules/prototypePollution.d.ts +8 -0
  411. package/dist/rules/vulnerabilities/rules/prototypePollution.d.ts.map +1 -0
  412. package/dist/rules/vulnerabilities/rules/prototypePollution.js +272 -0
  413. package/dist/rules/vulnerabilities/rules/prototypePollution.js.map +1 -0
  414. package/dist/rules/vulnerabilities/rules/securityMisconfiguration.d.ts +8 -0
  415. package/dist/rules/vulnerabilities/rules/securityMisconfiguration.d.ts.map +1 -0
  416. package/dist/rules/vulnerabilities/rules/securityMisconfiguration.js +438 -0
  417. package/dist/rules/vulnerabilities/rules/securityMisconfiguration.js.map +1 -0
  418. package/dist/rules/vulnerabilities/rules/sqlInjection.d.ts +12 -0
  419. package/dist/rules/vulnerabilities/rules/sqlInjection.d.ts.map +1 -0
  420. package/dist/rules/vulnerabilities/rules/sqlInjection.js +636 -0
  421. package/dist/rules/vulnerabilities/rules/sqlInjection.js.map +1 -0
  422. package/dist/rules/vulnerabilities/rules/ssrf.d.ts +8 -0
  423. package/dist/rules/vulnerabilities/rules/ssrf.d.ts.map +1 -0
  424. package/dist/rules/vulnerabilities/rules/ssrf.js +401 -0
  425. package/dist/rules/vulnerabilities/rules/ssrf.js.map +1 -0
  426. package/dist/rules/vulnerabilities/rules/xss.d.ts +11 -0
  427. package/dist/rules/vulnerabilities/rules/xss.d.ts.map +1 -0
  428. package/dist/rules/vulnerabilities/rules/xss.js +724 -0
  429. package/dist/rules/vulnerabilities/rules/xss.js.map +1 -0
  430. package/dist/rules/vulnerabilities/scoring/index.d.ts +80 -0
  431. package/dist/rules/vulnerabilities/scoring/index.d.ts.map +1 -0
  432. package/dist/rules/vulnerabilities/scoring/index.js +414 -0
  433. package/dist/rules/vulnerabilities/scoring/index.js.map +1 -0
  434. package/dist/rules/vulnerabilities/types/index.d.ts +830 -0
  435. package/dist/rules/vulnerabilities/types/index.d.ts.map +1 -0
  436. package/dist/rules/vulnerabilities/types/index.js +164 -0
  437. package/dist/rules/vulnerabilities/types/index.js.map +1 -0
  438. package/dist/rules/vulnerabilities/utils/index.d.ts +206 -0
  439. package/dist/rules/vulnerabilities/utils/index.d.ts.map +1 -0
  440. package/dist/rules/vulnerabilities/utils/index.js +615 -0
  441. package/dist/rules/vulnerabilities/utils/index.js.map +1 -0
  442. package/dist/types/index.d.ts +359 -0
  443. package/dist/types/index.d.ts.map +1 -0
  444. package/dist/types/index.js +61 -0
  445. package/dist/types/index.js.map +1 -0
  446. package/dist/utils/index.d.ts +82 -0
  447. package/dist/utils/index.d.ts.map +1 -0
  448. package/dist/utils/index.js +326 -0
  449. package/dist/utils/index.js.map +1 -0
  450. package/dist/utils/logger.d.ts +40 -0
  451. package/dist/utils/logger.d.ts.map +1 -0
  452. package/dist/utils/logger.js +139 -0
  453. package/dist/utils/logger.js.map +1 -0
  454. package/docs/ARCHITECTURE.md +320 -0
  455. package/docs/V1.2.1-IA_Performances.md +116 -0
  456. package/docs/images/WIN_Defender.png +0 -0
  457. package/package.json +68 -0
  458. package/secure-scan.config.json +134 -0
  459. package/secure-scan.sln +29 -0
  460. package/src/ai/aiAnalyzer.ts +714 -0
  461. package/src/ai/index.ts +5 -0
  462. package/src/analyzers/base/baseAnalyzer.ts +66 -0
  463. package/src/analyzers/base/index.ts +5 -0
  464. package/src/analyzers/c-cpp/cppAnalyzer.ts +308 -0
  465. package/src/analyzers/c-cpp/index.ts +5 -0
  466. package/src/analyzers/core/engine/index.ts +5 -0
  467. package/src/analyzers/core/engine/ruleEngine.ts +221 -0
  468. package/src/analyzers/core/index.ts +8 -0
  469. package/src/analyzers/core/scanner/fileScanner.ts +204 -0
  470. package/src/analyzers/core/scanner/index.ts +5 -0
  471. package/src/analyzers/core/scoring/index.ts +5 -0
  472. package/src/analyzers/core/scoring/riskScoring.ts +198 -0
  473. package/src/analyzers/core/securityScanner.ts +321 -0
  474. package/src/analyzers/csharp/csharpAnalyzer.ts +328 -0
  475. package/src/analyzers/csharp/index.ts +5 -0
  476. package/src/analyzers/iac/iacAnalyzer.ts +318 -0
  477. package/src/analyzers/iac/index.ts +5 -0
  478. package/src/analyzers/index.ts +67 -0
  479. package/src/analyzers/java/index.ts +5 -0
  480. package/src/analyzers/java/javaAnalyzer.ts +320 -0
  481. package/src/analyzers/javascript/PROMPT_JS_ANALYZER.md +267 -0
  482. package/src/analyzers/javascript/astUtils.ts +789 -0
  483. package/src/analyzers/javascript/index.ts +50 -0
  484. package/src/analyzers/javascript/javascriptAnalyzer.ts +984 -0
  485. package/src/analyzers/javascript/malwareDetector.ts +697 -0
  486. package/src/analyzers/javascript/packageJsonAnalyzer.ts +626 -0
  487. package/src/analyzers/javascript/taintAnalyzer.ts +630 -0
  488. package/src/analyzers/php/index.ts +5 -0
  489. package/src/analyzers/php/phpAnalyzer.ts +280 -0
  490. package/src/analyzers/python/index.ts +5 -0
  491. package/src/analyzers/python/pythonAnalyzer.ts +319 -0
  492. package/src/cli/index.ts +276 -0
  493. package/src/dependencies/aiDependencyAnalyzer.ts +496 -0
  494. package/src/dependencies/database/cveDatabase.ts +426 -0
  495. package/src/dependencies/database/index.ts +6 -0
  496. package/src/dependencies/database/maliciousPackages.ts +286 -0
  497. package/src/dependencies/dependencyAnalyzer.ts +394 -0
  498. package/src/dependencies/detectors/index.ts +7 -0
  499. package/src/dependencies/detectors/securityStandards.ts +200 -0
  500. package/src/dependencies/detectors/vulnerabilityDetector.ts +343 -0
  501. package/src/dependencies/index.ts +27 -0
  502. package/src/dependencies/installed/index.ts +8 -0
  503. package/src/dependencies/installed/installedScanner.ts +821 -0
  504. package/src/dependencies/installed/malwarePatterns.ts +492 -0
  505. package/src/dependencies/installed/types.ts +287 -0
  506. package/src/dependencies/parsers/base/baseParser.ts +108 -0
  507. package/src/dependencies/parsers/base/index.ts +6 -0
  508. package/src/dependencies/parsers/cpp/cppParser.ts +245 -0
  509. package/src/dependencies/parsers/cpp/index.ts +6 -0
  510. package/src/dependencies/parsers/csharp/csharpParser.ts +151 -0
  511. package/src/dependencies/parsers/csharp/index.ts +6 -0
  512. package/src/dependencies/parsers/index.ts +56 -0
  513. package/src/dependencies/parsers/java/index.ts +6 -0
  514. package/src/dependencies/parsers/java/javaParser.ts +203 -0
  515. package/src/dependencies/parsers/javascript/index.ts +6 -0
  516. package/src/dependencies/parsers/javascript/javascriptParser.ts +362 -0
  517. package/src/dependencies/parsers/php/index.ts +6 -0
  518. package/src/dependencies/parsers/php/phpParser.ts +208 -0
  519. package/src/dependencies/parsers/python/index.ts +6 -0
  520. package/src/dependencies/parsers/python/pythonParser.ts +437 -0
  521. package/src/dependencies/types.ts +330 -0
  522. package/src/i18n/index.ts +1 -0
  523. package/src/i18n/translations.ts +194 -0
  524. package/src/index.ts +16 -0
  525. package/src/reports/dependencyReportGenerator.ts +717 -0
  526. package/src/reports/htmlReportGenerator.ts +781 -0
  527. package/src/reports/index.ts +7 -0
  528. package/src/reports/installedDepsReportGenerator.ts +899 -0
  529. package/src/rules/index.ts +58 -0
  530. package/src/rules/malware/INFO.md +287 -0
  531. package/src/rules/malware/categories/backdoors.ts +174 -0
  532. package/src/rules/malware/categories/cryptominers.ts +434 -0
  533. package/src/rules/malware/categories/exfiltration.ts +677 -0
  534. package/src/rules/malware/categories/keyloggers.ts +780 -0
  535. package/src/rules/malware/categories/loaders.ts +721 -0
  536. package/src/rules/malware/categories/network.ts +639 -0
  537. package/src/rules/malware/categories/obfuscation.ts +788 -0
  538. package/src/rules/malware/constants/index.ts +358 -0
  539. package/src/rules/malware/engine/index.ts +758 -0
  540. package/src/rules/malware/index.ts +928 -0
  541. package/src/rules/malware/scoring/index.ts +549 -0
  542. package/src/rules/malware/types/index.ts +752 -0
  543. package/src/rules/malware/utils/index.ts +643 -0
  544. package/src/rules/standards.ts +372 -0
  545. package/src/rules/vulnerabilities/PROMPT_VULNERABILITIES.md +226 -0
  546. package/src/rules/vulnerabilities/constants/index.ts +625 -0
  547. package/src/rules/vulnerabilities/engine/index.ts +831 -0
  548. package/src/rules/vulnerabilities/index.ts +312 -0
  549. package/src/rules/vulnerabilities/rules/authentication.ts +426 -0
  550. package/src/rules/vulnerabilities/rules/commandInjection.ts +307 -0
  551. package/src/rules/vulnerabilities/rules/csrf.ts +268 -0
  552. package/src/rules/vulnerabilities/rules/deserialization.ts +343 -0
  553. package/src/rules/vulnerabilities/rules/fileUpload.ts +332 -0
  554. package/src/rules/vulnerabilities/rules/hardcodedSecrets.ts +453 -0
  555. package/src/rules/vulnerabilities/rules/index.ts +17 -0
  556. package/src/rules/vulnerabilities/rules/pathTraversal.ts +358 -0
  557. package/src/rules/vulnerabilities/rules/prototypePollution.ts +279 -0
  558. package/src/rules/vulnerabilities/rules/securityMisconfiguration.ts +445 -0
  559. package/src/rules/vulnerabilities/rules/sqlInjection.ts +669 -0
  560. package/src/rules/vulnerabilities/rules/ssrf.ts +408 -0
  561. package/src/rules/vulnerabilities/rules/xss.ts +753 -0
  562. package/src/rules/vulnerabilities/scoring/index.ts +543 -0
  563. package/src/rules/vulnerabilities/types/index.ts +1004 -0
  564. package/src/rules/vulnerabilities/utils/index.ts +709 -0
  565. package/src/types/index.ts +391 -0
  566. package/src/utils/index.ts +306 -0
  567. package/src/utils/logger.ts +150 -0
  568. package/test-installed-scanner.ts +136 -0
  569. package/tsconfig.json +30 -0
@@ -0,0 +1,669 @@
1
+ "use strict";
2
+ /**
3
+ * AI Analyzer Module
4
+ * Uses AI/ML for advanced threat detection and analysis
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.AIAnalyzer = void 0;
41
+ const types_1 = require("../types");
42
+ const logger_1 = require("../utils/logger");
43
+ const utils_1 = require("../utils");
44
+ const standards_1 = require("../rules/standards");
45
+ /**
46
+ * AI Analyzer Class
47
+ * Provides AI-powered security analysis
48
+ */
49
+ class AIAnalyzer {
50
+ config;
51
+ initialized = false;
52
+ detectedProvider = 'openai';
53
+ constructor(config) {
54
+ this.config = config;
55
+ // Auto-detect provider from API key if set to 'auto' or not specified correctly
56
+ this.detectedProvider = this.detectProvider();
57
+ }
58
+ /**
59
+ * Auto-detect AI provider from API key format
60
+ */
61
+ detectProvider() {
62
+ const apiKey = this.config.apiKey || '';
63
+ const provider = this.config.provider;
64
+ // If explicitly set to local, use local
65
+ if (provider === 'local') {
66
+ return 'local';
67
+ }
68
+ // Auto-detect from API key format
69
+ if (apiKey.startsWith('sk-ant-') || apiKey.startsWith('sk-ant')) {
70
+ logger_1.logger.debug('🔍 Detected Anthropic API key');
71
+ return 'anthropic';
72
+ }
73
+ if (apiKey.startsWith('AIzaSy') || apiKey.startsWith('AIza')) {
74
+ logger_1.logger.debug('🔍 Detected Google AI API key');
75
+ return 'google';
76
+ }
77
+ if (apiKey.startsWith('sk-') || apiKey.startsWith('sk-proj-')) {
78
+ logger_1.logger.debug('🔍 Detected OpenAI API key');
79
+ return 'openai';
80
+ }
81
+ // Fallback to configured provider or openai
82
+ if (provider === 'google' || provider === 'gemini') {
83
+ return 'google';
84
+ }
85
+ if (provider === 'anthropic') {
86
+ return 'anthropic';
87
+ }
88
+ if (provider === 'openai') {
89
+ return 'openai';
90
+ }
91
+ // Default to openai if we can't detect
92
+ return 'openai';
93
+ }
94
+ /**
95
+ * Initialize AI analyzer
96
+ */
97
+ async initialize() {
98
+ if (!this.config.apiKey && this.detectedProvider !== 'local') {
99
+ logger_1.logger.warn('⚠️ AI API key not provided. AI analysis will be limited.');
100
+ return;
101
+ }
102
+ const providerName = this.detectedProvider === 'google' ? 'Google AI (Gemini)' :
103
+ this.detectedProvider === 'anthropic' ? 'Anthropic (Claude)' :
104
+ this.detectedProvider === 'openai' ? 'OpenAI (GPT)' : 'Local';
105
+ logger_1.logger.info(`🤖 Initializing AI analyzer with ${providerName}...`);
106
+ this.initialized = true;
107
+ }
108
+ /**
109
+ * Analyze code with AI
110
+ */
111
+ async analyze(file) {
112
+ if (!this.initialized) {
113
+ return { findings: [] };
114
+ }
115
+ try {
116
+ switch (this.detectedProvider) {
117
+ case 'openai':
118
+ return await this.analyzeWithOpenAI(file);
119
+ case 'anthropic':
120
+ return await this.analyzeWithAnthropic(file);
121
+ case 'google':
122
+ return await this.analyzeWithGoogle(file);
123
+ case 'local':
124
+ return await this.analyzeWithLocal(file);
125
+ default:
126
+ return { findings: [] };
127
+ }
128
+ }
129
+ catch (error) {
130
+ logger_1.logger.debug(`AI analysis error: ${error}`);
131
+ return { findings: [] };
132
+ }
133
+ }
134
+ /**
135
+ * Get the best model for the provider
136
+ */
137
+ getModel() {
138
+ if (this.config.model) {
139
+ return this.config.model;
140
+ }
141
+ // Default models per provider
142
+ switch (this.detectedProvider) {
143
+ case 'openai':
144
+ return 'gpt-4o'; // Latest and most capable
145
+ case 'anthropic':
146
+ return 'claude-3-sonnet-20240229';
147
+ case 'google':
148
+ return 'gemini-pro'; // Stable model for v1beta API
149
+ default:
150
+ return 'gpt-4';
151
+ }
152
+ }
153
+ /**
154
+ * Analyze with OpenAI (supports all GPT models)
155
+ */
156
+ async analyzeWithOpenAI(file) {
157
+ // Dynamic import to avoid issues if package not installed
158
+ const OpenAI = (await Promise.resolve().then(() => __importStar(require('openai')))).default;
159
+ const client = new OpenAI({
160
+ apiKey: this.config.apiKey
161
+ });
162
+ const prompt = this.buildAnalysisPrompt(file);
163
+ const model = this.getModel();
164
+ logger_1.logger.debug(`Using OpenAI model: ${model}`);
165
+ try {
166
+ const response = await client.chat.completions.create({
167
+ model: model,
168
+ messages: [
169
+ {
170
+ role: 'system',
171
+ content: this.getSystemPrompt()
172
+ },
173
+ {
174
+ role: 'user',
175
+ content: prompt
176
+ }
177
+ ],
178
+ max_tokens: this.config.maxTokens || 2000,
179
+ temperature: this.config.temperature || 0.1
180
+ });
181
+ const content = response.choices[0]?.message?.content;
182
+ if (!content) {
183
+ return { findings: [] };
184
+ }
185
+ return this.parseAIResponse(content, file);
186
+ }
187
+ catch (error) {
188
+ if (error?.status === 429) {
189
+ logger_1.logger.warn('⚠️ OpenAI: Cuota excedida. Verifica tu plan en https://platform.openai.com/account/billing');
190
+ }
191
+ else if (error?.status === 401) {
192
+ logger_1.logger.warn('⚠️ OpenAI: API key inválida');
193
+ }
194
+ else {
195
+ logger_1.logger.debug(`OpenAI error: ${error.message || error}`);
196
+ }
197
+ return { findings: [] };
198
+ }
199
+ }
200
+ /**
201
+ * Analyze with Anthropic Claude
202
+ */
203
+ async analyzeWithAnthropic(file) {
204
+ try {
205
+ const Anthropic = (await Promise.resolve().then(() => __importStar(require('@anthropic-ai/sdk')))).default;
206
+ const client = new Anthropic({
207
+ apiKey: this.config.apiKey
208
+ });
209
+ const prompt = this.buildAnalysisPrompt(file);
210
+ const model = this.getModel();
211
+ logger_1.logger.debug(`Using Anthropic model: ${model}`);
212
+ const response = await client.messages.create({
213
+ model: model,
214
+ max_tokens: this.config.maxTokens || 2000,
215
+ system: this.getSystemPrompt(),
216
+ messages: [
217
+ {
218
+ role: 'user',
219
+ content: prompt
220
+ }
221
+ ]
222
+ });
223
+ const content = response.content[0];
224
+ if (!content || content.type !== 'text') {
225
+ return { findings: [] };
226
+ }
227
+ return this.parseAIResponse(content.text, file);
228
+ }
229
+ catch (error) {
230
+ logger_1.logger.debug(`Anthropic analysis error: ${error}`);
231
+ return { findings: [] };
232
+ }
233
+ }
234
+ /**
235
+ * Analyze with Google AI (Gemini)
236
+ */
237
+ async analyzeWithGoogle(file) {
238
+ try {
239
+ const prompt = this.buildAnalysisPrompt(file);
240
+ const model = this.getModel();
241
+ logger_1.logger.debug(`Using Google AI model: ${model}`);
242
+ // Use Google AI REST API directly
243
+ const apiKey = this.config.apiKey;
244
+ // Try v1 API first, fallback to v1beta
245
+ const apis = [
246
+ `https://generativelanguage.googleapis.com/v1/models/${model}:generateContent?key=${apiKey}`,
247
+ `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${apiKey}`
248
+ ];
249
+ let lastError = null;
250
+ for (const url of apis) {
251
+ try {
252
+ const response = await fetch(url, {
253
+ method: 'POST',
254
+ headers: {
255
+ 'Content-Type': 'application/json'
256
+ },
257
+ body: JSON.stringify({
258
+ contents: [
259
+ {
260
+ parts: [
261
+ {
262
+ text: `${this.getSystemPrompt()}\n\n${prompt}`
263
+ }
264
+ ]
265
+ }
266
+ ],
267
+ generationConfig: {
268
+ temperature: this.config.temperature || 0.1,
269
+ maxOutputTokens: this.config.maxTokens || 2000
270
+ }
271
+ })
272
+ });
273
+ const data = await response.json();
274
+ if (!response.ok) {
275
+ lastError = data.error;
276
+ continue; // Try next API version
277
+ }
278
+ const content = data.candidates?.[0]?.content?.parts?.[0]?.text;
279
+ if (!content) {
280
+ return { findings: [] };
281
+ }
282
+ return this.parseAIResponse(content, file);
283
+ }
284
+ catch (e) {
285
+ lastError = e;
286
+ continue;
287
+ }
288
+ }
289
+ // If all APIs failed, show helpful message
290
+ if (lastError) {
291
+ if (lastError.code === 404) {
292
+ logger_1.logger.warn(`⚠️ Google AI: Modelo "${model}" no disponible. Intenta con: gemini-pro`);
293
+ }
294
+ else if (lastError.code === 403) {
295
+ logger_1.logger.warn('⚠️ Google AI: API key sin permisos. Habilita la API en Google Cloud Console.');
296
+ }
297
+ else if (lastError.code === 429) {
298
+ logger_1.logger.warn('⚠️ Google AI: Cuota excedida. Espera un momento o verifica tu plan.');
299
+ }
300
+ else {
301
+ logger_1.logger.debug(`Google AI error: ${JSON.stringify(lastError)}`);
302
+ }
303
+ }
304
+ return { findings: [] };
305
+ }
306
+ catch (error) {
307
+ logger_1.logger.debug(`Google AI analysis error: ${error}`);
308
+ return { findings: [] };
309
+ }
310
+ }
311
+ // Cache for local AI results
312
+ analysisCache = new Map();
313
+ /**
314
+ * Analyze with local model (Ollama compatible) - Optimized for performance
315
+ */
316
+ async analyzeWithLocal(file) {
317
+ if (!this.config.endpoint) {
318
+ logger_1.logger.warn('Local AI endpoint not configured');
319
+ return { findings: [] };
320
+ }
321
+ // Check cache first
322
+ const perf = this.config.performance || {};
323
+ if (perf.enableCache) {
324
+ const cacheKey = `${file.hash}-${this.config.model}`;
325
+ const cached = this.analysisCache.get(cacheKey);
326
+ if (cached) {
327
+ logger_1.logger.debug(`⚡ Cache hit for ${file.relativePath}`);
328
+ return cached;
329
+ }
330
+ }
331
+ const prompt = this.buildAnalysisPrompt(file);
332
+ const model = this.config.model || 'codellama:7b-instruct';
333
+ try {
334
+ logger_1.logger.debug(`🤖 Usando modelo local: ${model}`);
335
+ // Build Ollama options with performance tuning
336
+ const ollamaOptions = {
337
+ num_predict: this.config.maxTokens || 2000,
338
+ temperature: this.config.temperature || 0.1,
339
+ };
340
+ // Apply performance settings
341
+ if (perf.numGpuLayers !== undefined) {
342
+ ollamaOptions.num_gpu = perf.numGpuLayers;
343
+ }
344
+ if (perf.numThreads !== undefined) {
345
+ ollamaOptions.num_thread = perf.numThreads;
346
+ }
347
+ if (perf.contextSize !== undefined) {
348
+ ollamaOptions.num_ctx = perf.contextSize;
349
+ }
350
+ if (perf.batchSize !== undefined) {
351
+ ollamaOptions.num_batch = perf.batchSize;
352
+ }
353
+ if (perf.useMmap !== undefined) {
354
+ ollamaOptions.use_mmap = perf.useMmap;
355
+ }
356
+ if (perf.useMlock !== undefined) {
357
+ ollamaOptions.use_mlock = perf.useMlock;
358
+ }
359
+ // Use AbortController for timeout
360
+ const controller = new AbortController();
361
+ const timeout = perf.timeout || 120000; // 2 minutes default
362
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
363
+ const response = await fetch(this.config.endpoint, {
364
+ method: 'POST',
365
+ headers: {
366
+ 'Content-Type': 'application/json'
367
+ },
368
+ body: JSON.stringify({
369
+ model: model,
370
+ prompt: `${this.getSystemPrompt()}\n\n${prompt}`,
371
+ stream: false,
372
+ options: ollamaOptions
373
+ }),
374
+ signal: controller.signal
375
+ });
376
+ clearTimeout(timeoutId);
377
+ if (!response.ok) {
378
+ const errorText = await response.text();
379
+ logger_1.logger.warn(`⚠️ Error del modelo local (${response.status}): ${errorText}`);
380
+ return { findings: [] };
381
+ }
382
+ const data = await response.json();
383
+ const content = data.response || data.content || data.message?.content || '';
384
+ if (!content) {
385
+ logger_1.logger.debug('El modelo local no devolvió respuesta');
386
+ return { findings: [] };
387
+ }
388
+ const result = this.parseAIResponse(content, file);
389
+ // Store in cache
390
+ if (perf.enableCache) {
391
+ const cacheKey = `${file.hash}-${this.config.model}`;
392
+ this.analysisCache.set(cacheKey, result);
393
+ }
394
+ return result;
395
+ }
396
+ catch (error) {
397
+ if (error.name === 'AbortError') {
398
+ logger_1.logger.warn(`⚠️ Timeout analizando ${file.relativePath}`);
399
+ }
400
+ else if (error.code === 'ECONNREFUSED') {
401
+ logger_1.logger.warn('⚠️ No se puede conectar al servidor local. ¿Está Ollama ejecutándose?');
402
+ logger_1.logger.info('💡 Inicia Ollama con: ollama serve');
403
+ }
404
+ else {
405
+ logger_1.logger.debug(`Local AI error: ${error.message || error}`);
406
+ }
407
+ return { findings: [] };
408
+ }
409
+ }
410
+ /**
411
+ * Analyze multiple files in parallel (for local models)
412
+ */
413
+ async analyzeParallel(files) {
414
+ const results = new Map();
415
+ const parallelRequests = this.config.performance?.parallelRequests || 1;
416
+ // Process in batches
417
+ for (let i = 0; i < files.length; i += parallelRequests) {
418
+ const batch = files.slice(i, i + parallelRequests);
419
+ const batchPromises = batch.map(async (file) => {
420
+ const result = await this.analyze(file);
421
+ return { path: file.relativePath, result };
422
+ });
423
+ const batchResults = await Promise.all(batchPromises);
424
+ for (const { path, result } of batchResults) {
425
+ results.set(path, result);
426
+ }
427
+ }
428
+ return results;
429
+ }
430
+ /**
431
+ * Clear the analysis cache
432
+ */
433
+ clearCache() {
434
+ this.analysisCache.clear();
435
+ logger_1.logger.debug('🗑️ AI analysis cache cleared');
436
+ }
437
+ /**
438
+ * Get system prompt for AI
439
+ */
440
+ getSystemPrompt() {
441
+ return `You are an expert security analyst specializing in static code analysis (SAST).
442
+ Your task is to analyze code for:
443
+ 1. Security vulnerabilities (SQL injection, XSS, command injection, etc.)
444
+ 2. Malicious code patterns (backdoors, keyloggers, data exfiltration)
445
+ 3. Insecure configurations
446
+ 4. Hardcoded credentials
447
+
448
+ For each finding, provide:
449
+ - Title: Brief description
450
+ - Severity: critical, high, medium, low, or info
451
+ - Type: vulnerability type (sql_injection, xss, backdoor, etc.)
452
+ - Line: approximate line number
453
+ - Description: detailed explanation
454
+ - Remediation: how to fix
455
+
456
+ Respond in JSON format:
457
+ {
458
+ "findings": [
459
+ {
460
+ "title": "...",
461
+ "severity": "...",
462
+ "type": "...",
463
+ "line": 123,
464
+ "description": "...",
465
+ "remediation": "..."
466
+ }
467
+ ],
468
+ "riskAssessment": "Overall risk assessment",
469
+ "explanation": "Summary of analysis"
470
+ }
471
+
472
+ Be precise and avoid false positives. Focus on real security issues.`;
473
+ }
474
+ /**
475
+ * Build analysis prompt
476
+ */
477
+ buildAnalysisPrompt(file) {
478
+ // Truncate large files
479
+ const maxLength = 8000;
480
+ const content = file.content.length > maxLength
481
+ ? file.content.substring(0, maxLength) + '\n... (truncated)'
482
+ : file.content;
483
+ return `Analyze this ${file.language || 'unknown'} code file for security issues:
484
+
485
+ File: ${file.relativePath}
486
+ Language: ${file.language || 'unknown'}
487
+
488
+ \`\`\`
489
+ ${content}
490
+ \`\`\`
491
+
492
+ Identify all security vulnerabilities and malicious code patterns.`;
493
+ }
494
+ /**
495
+ * Parse AI response into findings
496
+ */
497
+ parseAIResponse(response, file) {
498
+ try {
499
+ // Extract JSON from response
500
+ const jsonMatch = response.match(/\{[\s\S]*\}/);
501
+ if (!jsonMatch) {
502
+ return { findings: [] };
503
+ }
504
+ const parsed = JSON.parse(jsonMatch[0]);
505
+ const findings = [];
506
+ for (const item of parsed.findings || []) {
507
+ const finding = this.convertToFinding(item, file);
508
+ if (finding) {
509
+ findings.push(finding);
510
+ }
511
+ }
512
+ return {
513
+ findings,
514
+ explanation: parsed.explanation,
515
+ riskAssessment: parsed.riskAssessment
516
+ };
517
+ }
518
+ catch (error) {
519
+ logger_1.logger.debug(`Failed to parse AI response: ${error}`);
520
+ return { findings: [] };
521
+ }
522
+ }
523
+ /**
524
+ * Convert AI finding to Finding type
525
+ */
526
+ convertToFinding(item, file) {
527
+ if (!item.title || !item.severity) {
528
+ return null;
529
+ }
530
+ const severity = this.parseSeverity(item.severity);
531
+ const threatType = this.parseThreatType(item.type);
532
+ const lineNum = parseInt(item.line) || 1;
533
+ // Extract code context
534
+ const lines = file.content.split('\n');
535
+ const code = lines[lineNum - 1] || '';
536
+ const contextBefore = lines.slice(Math.max(0, lineNum - 3), lineNum - 1).join('\n');
537
+ const contextAfter = lines.slice(lineNum, Math.min(lines.length, lineNum + 2)).join('\n');
538
+ return {
539
+ id: (0, utils_1.generateId)(),
540
+ title: item.title,
541
+ description: item.description || item.title,
542
+ severity,
543
+ threatType,
544
+ category: this.ismalwareType(threatType) ? types_1.FindingCategory.MALWARE : types_1.FindingCategory.VULNERABILITY,
545
+ location: {
546
+ file: file.relativePath,
547
+ startLine: lineNum,
548
+ endLine: lineNum
549
+ },
550
+ snippet: {
551
+ code,
552
+ contextBefore,
553
+ contextAfter
554
+ },
555
+ standards: (0, standards_1.getStandardsForThreat)(threatType),
556
+ remediation: item.remediation || 'Review and fix the identified issue.',
557
+ confidence: 70,
558
+ analyzer: 'AI Analyzer',
559
+ timestamp: new Date(),
560
+ tags: ['ai-detected'],
561
+ aiExplanation: item.description,
562
+ suggestedFix: item.remediation
563
+ };
564
+ }
565
+ /**
566
+ * Parse severity string
567
+ */
568
+ parseSeverity(severity) {
569
+ const lower = severity.toLowerCase();
570
+ if (lower.includes('critical'))
571
+ return types_1.Severity.CRITICAL;
572
+ if (lower.includes('high'))
573
+ return types_1.Severity.HIGH;
574
+ if (lower.includes('medium'))
575
+ return types_1.Severity.MEDIUM;
576
+ if (lower.includes('low'))
577
+ return types_1.Severity.LOW;
578
+ return types_1.Severity.INFO;
579
+ }
580
+ /**
581
+ * Parse threat type string
582
+ */
583
+ parseThreatType(type) {
584
+ const lower = (type || '').toLowerCase().replace(/[_-]/g, '');
585
+ const typeMap = {
586
+ 'sqlinjection': types_1.ThreatType.SQL_INJECTION,
587
+ 'sqli': types_1.ThreatType.SQL_INJECTION,
588
+ 'commandinjection': types_1.ThreatType.COMMAND_INJECTION,
589
+ 'cmdi': types_1.ThreatType.COMMAND_INJECTION,
590
+ 'xss': types_1.ThreatType.XSS,
591
+ 'crosssitescripting': types_1.ThreatType.XSS,
592
+ 'csrf': types_1.ThreatType.CSRF,
593
+ 'deserialization': types_1.ThreatType.INSECURE_DESERIALIZATION,
594
+ 'hardcodedcredentials': types_1.ThreatType.HARDCODED_CREDENTIALS,
595
+ 'credentials': types_1.ThreatType.HARDCODED_CREDENTIALS,
596
+ 'pathtraversal': types_1.ThreatType.PATH_TRAVERSAL,
597
+ 'lfi': types_1.ThreatType.PATH_TRAVERSAL,
598
+ 'backdoor': types_1.ThreatType.BACKDOOR,
599
+ 'keylogger': types_1.ThreatType.KEYLOGGER,
600
+ 'cryptominer': types_1.ThreatType.CRYPTOMINER,
601
+ 'obfuscation': types_1.ThreatType.OBFUSCATED_CODE,
602
+ 'exfiltration': types_1.ThreatType.DATA_EXFILTRATION
603
+ };
604
+ return typeMap[lower] || types_1.ThreatType.DANGEROUS_FUNCTION;
605
+ }
606
+ /**
607
+ * Check if threat type is malware
608
+ */
609
+ ismalwareType(type) {
610
+ const malwareTypes = [
611
+ types_1.ThreatType.BACKDOOR,
612
+ types_1.ThreatType.KEYLOGGER,
613
+ types_1.ThreatType.CRYPTOMINER,
614
+ types_1.ThreatType.OBFUSCATED_CODE,
615
+ types_1.ThreatType.EMBEDDED_PAYLOAD,
616
+ types_1.ThreatType.REVERSE_SHELL,
617
+ types_1.ThreatType.DATA_EXFILTRATION,
618
+ types_1.ThreatType.MALICIOUS_LOADER
619
+ ];
620
+ return malwareTypes.includes(type);
621
+ }
622
+ /**
623
+ * Enhance finding with AI explanation
624
+ */
625
+ async enhanceFinding(finding) {
626
+ if (!this.initialized || !this.config.apiKey) {
627
+ return finding;
628
+ }
629
+ try {
630
+ const OpenAI = (await Promise.resolve().then(() => __importStar(require('openai')))).default;
631
+ const client = new OpenAI({ apiKey: this.config.apiKey });
632
+ const response = await client.chat.completions.create({
633
+ model: this.config.model || 'gpt-4',
634
+ messages: [
635
+ {
636
+ role: 'system',
637
+ content: 'You are a security expert. Provide a clear, technical explanation of the security issue and a specific code fix.'
638
+ },
639
+ {
640
+ role: 'user',
641
+ content: `Explain this security finding and provide a fix:
642
+
643
+ Title: ${finding.title}
644
+ Type: ${finding.threatType}
645
+ Code:
646
+ \`\`\`
647
+ ${finding.snippet.code}
648
+ \`\`\`
649
+
650
+ Provide a 2-3 sentence explanation and a corrected code example.`
651
+ }
652
+ ],
653
+ max_tokens: 500,
654
+ temperature: 0.2
655
+ });
656
+ const content = response.choices[0]?.message?.content;
657
+ if (content) {
658
+ finding.aiExplanation = content;
659
+ }
660
+ }
661
+ catch (error) {
662
+ logger_1.logger.debug(`Failed to enhance finding: ${error}`);
663
+ }
664
+ return finding;
665
+ }
666
+ }
667
+ exports.AIAnalyzer = AIAnalyzer;
668
+ exports.default = AIAnalyzer;
669
+ //# sourceMappingURL=aiAnalyzer.js.map