@nahisaho/musubix-security 2.0.1 → 2.1.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 (363) hide show
  1. package/dist/analysis/enhanced-taint-analyzer.d.ts +120 -0
  2. package/dist/analysis/enhanced-taint-analyzer.d.ts.map +1 -0
  3. package/dist/analysis/enhanced-taint-analyzer.js +450 -0
  4. package/dist/analysis/enhanced-taint-analyzer.js.map +1 -0
  5. package/dist/analysis/index.d.ts +1 -0
  6. package/dist/analysis/index.d.ts.map +1 -1
  7. package/dist/analysis/index.js +1 -0
  8. package/dist/analysis/index.js.map +1 -1
  9. package/dist/analysis/interprocedural/call-graph-builder.d.ts +192 -0
  10. package/dist/analysis/interprocedural/call-graph-builder.d.ts.map +1 -0
  11. package/dist/analysis/interprocedural/call-graph-builder.js +510 -0
  12. package/dist/analysis/interprocedural/call-graph-builder.js.map +1 -0
  13. package/dist/analysis/interprocedural/dfg-adapter.d.ts +166 -0
  14. package/dist/analysis/interprocedural/dfg-adapter.d.ts.map +1 -0
  15. package/dist/analysis/interprocedural/dfg-adapter.js +455 -0
  16. package/dist/analysis/interprocedural/dfg-adapter.js.map +1 -0
  17. package/dist/analysis/interprocedural/index.d.ts +9 -0
  18. package/dist/analysis/interprocedural/index.d.ts.map +1 -0
  19. package/dist/analysis/interprocedural/index.js +9 -0
  20. package/dist/analysis/interprocedural/index.js.map +1 -0
  21. package/dist/analysis/interprocedural/taint-propagator.d.ts +250 -0
  22. package/dist/analysis/interprocedural/taint-propagator.d.ts.map +1 -0
  23. package/dist/analysis/interprocedural/taint-propagator.js +435 -0
  24. package/dist/analysis/interprocedural/taint-propagator.js.map +1 -0
  25. package/dist/analysis/sanitizers/command-sanitizers.d.ts +12 -0
  26. package/dist/analysis/sanitizers/command-sanitizers.d.ts.map +1 -0
  27. package/dist/analysis/sanitizers/command-sanitizers.js +123 -0
  28. package/dist/analysis/sanitizers/command-sanitizers.js.map +1 -0
  29. package/dist/analysis/sanitizers/html-sanitizers.d.ts +12 -0
  30. package/dist/analysis/sanitizers/html-sanitizers.d.ts.map +1 -0
  31. package/dist/analysis/sanitizers/html-sanitizers.js +213 -0
  32. package/dist/analysis/sanitizers/html-sanitizers.js.map +1 -0
  33. package/dist/analysis/sanitizers/index.d.ts +35 -0
  34. package/dist/analysis/sanitizers/index.d.ts.map +1 -0
  35. package/dist/analysis/sanitizers/index.js +59 -0
  36. package/dist/analysis/sanitizers/index.js.map +1 -0
  37. package/dist/analysis/sanitizers/path-sanitizers.d.ts +12 -0
  38. package/dist/analysis/sanitizers/path-sanitizers.d.ts.map +1 -0
  39. package/dist/analysis/sanitizers/path-sanitizers.js +163 -0
  40. package/dist/analysis/sanitizers/path-sanitizers.js.map +1 -0
  41. package/dist/analysis/sanitizers/sql-sanitizers.d.ts +12 -0
  42. package/dist/analysis/sanitizers/sql-sanitizers.d.ts.map +1 -0
  43. package/dist/analysis/sanitizers/sql-sanitizers.js +216 -0
  44. package/dist/analysis/sanitizers/sql-sanitizers.js.map +1 -0
  45. package/dist/analysis/sanitizers/types.d.ts +78 -0
  46. package/dist/analysis/sanitizers/types.d.ts.map +1 -0
  47. package/dist/analysis/sanitizers/types.js +7 -0
  48. package/dist/analysis/sanitizers/types.js.map +1 -0
  49. package/dist/analysis/sanitizers/validation-sanitizers.d.ts +12 -0
  50. package/dist/analysis/sanitizers/validation-sanitizers.d.ts.map +1 -0
  51. package/dist/analysis/sanitizers/validation-sanitizers.js +268 -0
  52. package/dist/analysis/sanitizers/validation-sanitizers.js.map +1 -0
  53. package/dist/analysis/sinks/code-eval.d.ts +12 -0
  54. package/dist/analysis/sinks/code-eval.d.ts.map +1 -0
  55. package/dist/analysis/sinks/code-eval.js +231 -0
  56. package/dist/analysis/sinks/code-eval.js.map +1 -0
  57. package/dist/analysis/sinks/command-exec.d.ts +12 -0
  58. package/dist/analysis/sinks/command-exec.d.ts.map +1 -0
  59. package/dist/analysis/sinks/command-exec.js +187 -0
  60. package/dist/analysis/sinks/command-exec.js.map +1 -0
  61. package/dist/analysis/sinks/file-operations.d.ts +12 -0
  62. package/dist/analysis/sinks/file-operations.d.ts.map +1 -0
  63. package/dist/analysis/sinks/file-operations.js +239 -0
  64. package/dist/analysis/sinks/file-operations.js.map +1 -0
  65. package/dist/analysis/sinks/html-output.d.ts +12 -0
  66. package/dist/analysis/sinks/html-output.d.ts.map +1 -0
  67. package/dist/analysis/sinks/html-output.js +256 -0
  68. package/dist/analysis/sinks/html-output.js.map +1 -0
  69. package/dist/analysis/sinks/index.d.ts +30 -0
  70. package/dist/analysis/sinks/index.d.ts.map +1 -0
  71. package/dist/analysis/sinks/index.js +46 -0
  72. package/dist/analysis/sinks/index.js.map +1 -0
  73. package/dist/analysis/sinks/sql-query.d.ts +12 -0
  74. package/dist/analysis/sinks/sql-query.d.ts.map +1 -0
  75. package/dist/analysis/sinks/sql-query.js +209 -0
  76. package/dist/analysis/sinks/sql-query.js.map +1 -0
  77. package/dist/analysis/sinks/types.d.ts +97 -0
  78. package/dist/analysis/sinks/types.d.ts.map +1 -0
  79. package/dist/analysis/sinks/types.js +7 -0
  80. package/dist/analysis/sinks/types.js.map +1 -0
  81. package/dist/analysis/sources/database.d.ts +12 -0
  82. package/dist/analysis/sources/database.d.ts.map +1 -0
  83. package/dist/analysis/sources/database.js +211 -0
  84. package/dist/analysis/sources/database.js.map +1 -0
  85. package/dist/analysis/sources/environment.d.ts +12 -0
  86. package/dist/analysis/sources/environment.d.ts.map +1 -0
  87. package/dist/analysis/sources/environment.js +158 -0
  88. package/dist/analysis/sources/environment.js.map +1 -0
  89. package/dist/analysis/sources/file-system.d.ts +12 -0
  90. package/dist/analysis/sources/file-system.d.ts.map +1 -0
  91. package/dist/analysis/sources/file-system.js +180 -0
  92. package/dist/analysis/sources/file-system.js.map +1 -0
  93. package/dist/analysis/sources/http-request.d.ts +12 -0
  94. package/dist/analysis/sources/http-request.d.ts.map +1 -0
  95. package/dist/analysis/sources/http-request.js +179 -0
  96. package/dist/analysis/sources/http-request.js.map +1 -0
  97. package/dist/analysis/sources/index.d.ts +26 -0
  98. package/dist/analysis/sources/index.d.ts.map +1 -0
  99. package/dist/analysis/sources/index.js +40 -0
  100. package/dist/analysis/sources/index.js.map +1 -0
  101. package/dist/analysis/sources/types.d.ts +93 -0
  102. package/dist/analysis/sources/types.d.ts.map +1 -0
  103. package/dist/analysis/sources/types.js +7 -0
  104. package/dist/analysis/sources/types.js.map +1 -0
  105. package/dist/analysis/sources/user-input.d.ts +12 -0
  106. package/dist/analysis/sources/user-input.d.ts.map +1 -0
  107. package/dist/analysis/sources/user-input.js +261 -0
  108. package/dist/analysis/sources/user-input.js.map +1 -0
  109. package/dist/cve/cpe-matcher.d.ts +183 -0
  110. package/dist/cve/cpe-matcher.d.ts.map +1 -0
  111. package/dist/cve/cpe-matcher.js +396 -0
  112. package/dist/cve/cpe-matcher.js.map +1 -0
  113. package/dist/cve/cve-cache.d.ts +225 -0
  114. package/dist/cve/cve-cache.d.ts.map +1 -0
  115. package/dist/cve/cve-cache.js +452 -0
  116. package/dist/cve/cve-cache.js.map +1 -0
  117. package/dist/cve/cve-cache.test.d.ts +6 -0
  118. package/dist/cve/cve-cache.test.d.ts.map +1 -0
  119. package/dist/cve/cve-cache.test.js +363 -0
  120. package/dist/cve/cve-cache.test.js.map +1 -0
  121. package/dist/cve/dependency-parser.d.ts +204 -0
  122. package/dist/cve/dependency-parser.d.ts.map +1 -0
  123. package/dist/cve/dependency-parser.js +338 -0
  124. package/dist/cve/dependency-parser.js.map +1 -0
  125. package/dist/cve/index.d.ts +20 -0
  126. package/dist/cve/index.d.ts.map +1 -0
  127. package/dist/cve/index.js +13 -0
  128. package/dist/cve/index.js.map +1 -0
  129. package/dist/cve/nvd-client.d.ts +137 -0
  130. package/dist/cve/nvd-client.d.ts.map +1 -0
  131. package/dist/cve/nvd-client.js +333 -0
  132. package/dist/cve/nvd-client.js.map +1 -0
  133. package/dist/cve/rate-limiter.d.ts +194 -0
  134. package/dist/cve/rate-limiter.d.ts.map +1 -0
  135. package/dist/cve/rate-limiter.js +276 -0
  136. package/dist/cve/rate-limiter.js.map +1 -0
  137. package/dist/cve/report-generator.d.ts +145 -0
  138. package/dist/cve/report-generator.d.ts.map +1 -0
  139. package/dist/cve/report-generator.js +377 -0
  140. package/dist/cve/report-generator.js.map +1 -0
  141. package/dist/cve/report-generator.test.d.ts +6 -0
  142. package/dist/cve/report-generator.test.d.ts.map +1 -0
  143. package/dist/cve/report-generator.test.js +275 -0
  144. package/dist/cve/report-generator.test.js.map +1 -0
  145. package/dist/cve/vulnerability-scanner.d.ts +198 -0
  146. package/dist/cve/vulnerability-scanner.d.ts.map +1 -0
  147. package/dist/cve/vulnerability-scanner.js +311 -0
  148. package/dist/cve/vulnerability-scanner.js.map +1 -0
  149. package/dist/cve/vulnerability-scanner.test.d.ts +6 -0
  150. package/dist/cve/vulnerability-scanner.test.d.ts.map +1 -0
  151. package/dist/cve/vulnerability-scanner.test.js +329 -0
  152. package/dist/cve/vulnerability-scanner.test.js.map +1 -0
  153. package/dist/index.d.ts +1 -0
  154. package/dist/index.d.ts.map +1 -1
  155. package/dist/index.js +4 -0
  156. package/dist/index.js.map +1 -1
  157. package/dist/rules/config/config-parser.d.ts +119 -0
  158. package/dist/rules/config/config-parser.d.ts.map +1 -0
  159. package/dist/rules/config/config-parser.js +376 -0
  160. package/dist/rules/config/config-parser.js.map +1 -0
  161. package/dist/rules/config/index.d.ts +8 -0
  162. package/dist/rules/config/index.d.ts.map +1 -0
  163. package/dist/rules/config/index.js +8 -0
  164. package/dist/rules/config/index.js.map +1 -0
  165. package/dist/rules/config/profiles.d.ts +85 -0
  166. package/dist/rules/config/profiles.d.ts.map +1 -0
  167. package/dist/rules/config/profiles.js +226 -0
  168. package/dist/rules/config/profiles.js.map +1 -0
  169. package/dist/rules/cwe/cwe-119-buffer-overflow.d.ts +9 -0
  170. package/dist/rules/cwe/cwe-119-buffer-overflow.d.ts.map +1 -0
  171. package/dist/rules/cwe/cwe-119-buffer-overflow.js +54 -0
  172. package/dist/rules/cwe/cwe-119-buffer-overflow.js.map +1 -0
  173. package/dist/rules/cwe/cwe-125-oob-read.d.ts +20 -0
  174. package/dist/rules/cwe/cwe-125-oob-read.d.ts.map +1 -0
  175. package/dist/rules/cwe/cwe-125-oob-read.js +247 -0
  176. package/dist/rules/cwe/cwe-125-oob-read.js.map +1 -0
  177. package/dist/rules/cwe/cwe-190-integer-overflow.d.ts +9 -0
  178. package/dist/rules/cwe/cwe-190-integer-overflow.d.ts.map +1 -0
  179. package/dist/rules/cwe/cwe-190-integer-overflow.js +55 -0
  180. package/dist/rules/cwe/cwe-190-integer-overflow.js.map +1 -0
  181. package/dist/rules/cwe/cwe-20-input-validation.d.ts +21 -0
  182. package/dist/rules/cwe/cwe-20-input-validation.d.ts.map +1 -0
  183. package/dist/rules/cwe/cwe-20-input-validation.js +342 -0
  184. package/dist/rules/cwe/cwe-20-input-validation.js.map +1 -0
  185. package/dist/rules/cwe/cwe-22-path-traversal.d.ts +20 -0
  186. package/dist/rules/cwe/cwe-22-path-traversal.d.ts.map +1 -0
  187. package/dist/rules/cwe/cwe-22-path-traversal.js +306 -0
  188. package/dist/rules/cwe/cwe-22-path-traversal.js.map +1 -0
  189. package/dist/rules/cwe/cwe-269-improper-privilege.d.ts +9 -0
  190. package/dist/rules/cwe/cwe-269-improper-privilege.d.ts.map +1 -0
  191. package/dist/rules/cwe/cwe-269-improper-privilege.js +58 -0
  192. package/dist/rules/cwe/cwe-269-improper-privilege.js.map +1 -0
  193. package/dist/rules/cwe/cwe-276-default-permissions.d.ts +9 -0
  194. package/dist/rules/cwe/cwe-276-default-permissions.d.ts.map +1 -0
  195. package/dist/rules/cwe/cwe-276-default-permissions.js +54 -0
  196. package/dist/rules/cwe/cwe-276-default-permissions.js.map +1 -0
  197. package/dist/rules/cwe/cwe-287-improper-auth.d.ts +9 -0
  198. package/dist/rules/cwe/cwe-287-improper-auth.d.ts.map +1 -0
  199. package/dist/rules/cwe/cwe-287-improper-auth.js +57 -0
  200. package/dist/rules/cwe/cwe-287-improper-auth.js.map +1 -0
  201. package/dist/rules/cwe/cwe-306-missing-auth-critical.d.ts +9 -0
  202. package/dist/rules/cwe/cwe-306-missing-auth-critical.d.ts.map +1 -0
  203. package/dist/rules/cwe/cwe-306-missing-auth-critical.js +53 -0
  204. package/dist/rules/cwe/cwe-306-missing-auth-critical.js.map +1 -0
  205. package/dist/rules/cwe/cwe-352-csrf.d.ts +9 -0
  206. package/dist/rules/cwe/cwe-352-csrf.d.ts.map +1 -0
  207. package/dist/rules/cwe/cwe-352-csrf.js +51 -0
  208. package/dist/rules/cwe/cwe-352-csrf.js.map +1 -0
  209. package/dist/rules/cwe/cwe-362-race-condition.d.ts +9 -0
  210. package/dist/rules/cwe/cwe-362-race-condition.d.ts.map +1 -0
  211. package/dist/rules/cwe/cwe-362-race-condition.js +55 -0
  212. package/dist/rules/cwe/cwe-362-race-condition.js.map +1 -0
  213. package/dist/rules/cwe/cwe-416-use-after-free.d.ts +23 -0
  214. package/dist/rules/cwe/cwe-416-use-after-free.d.ts.map +1 -0
  215. package/dist/rules/cwe/cwe-416-use-after-free.js +402 -0
  216. package/dist/rules/cwe/cwe-416-use-after-free.js.map +1 -0
  217. package/dist/rules/cwe/cwe-434-file-upload.d.ts +9 -0
  218. package/dist/rules/cwe/cwe-434-file-upload.d.ts.map +1 -0
  219. package/dist/rules/cwe/cwe-434-file-upload.js +55 -0
  220. package/dist/rules/cwe/cwe-434-file-upload.js.map +1 -0
  221. package/dist/rules/cwe/cwe-476-null-deref.d.ts +9 -0
  222. package/dist/rules/cwe/cwe-476-null-deref.d.ts.map +1 -0
  223. package/dist/rules/cwe/cwe-476-null-deref.js +55 -0
  224. package/dist/rules/cwe/cwe-476-null-deref.js.map +1 -0
  225. package/dist/rules/cwe/cwe-502-deserialization.d.ts +9 -0
  226. package/dist/rules/cwe/cwe-502-deserialization.d.ts.map +1 -0
  227. package/dist/rules/cwe/cwe-502-deserialization.js +57 -0
  228. package/dist/rules/cwe/cwe-502-deserialization.js.map +1 -0
  229. package/dist/rules/cwe/cwe-77-command-injection.d.ts +9 -0
  230. package/dist/rules/cwe/cwe-77-command-injection.d.ts.map +1 -0
  231. package/dist/rules/cwe/cwe-77-command-injection.js +55 -0
  232. package/dist/rules/cwe/cwe-77-command-injection.js.map +1 -0
  233. package/dist/rules/cwe/cwe-78-command-injection.d.ts +20 -0
  234. package/dist/rules/cwe/cwe-78-command-injection.d.ts.map +1 -0
  235. package/dist/rules/cwe/cwe-78-command-injection.js +259 -0
  236. package/dist/rules/cwe/cwe-78-command-injection.js.map +1 -0
  237. package/dist/rules/cwe/cwe-787-oob-write.d.ts +21 -0
  238. package/dist/rules/cwe/cwe-787-oob-write.d.ts.map +1 -0
  239. package/dist/rules/cwe/cwe-787-oob-write.js +321 -0
  240. package/dist/rules/cwe/cwe-787-oob-write.js.map +1 -0
  241. package/dist/rules/cwe/cwe-79-xss.d.ts +22 -0
  242. package/dist/rules/cwe/cwe-79-xss.d.ts.map +1 -0
  243. package/dist/rules/cwe/cwe-79-xss.js +386 -0
  244. package/dist/rules/cwe/cwe-79-xss.js.map +1 -0
  245. package/dist/rules/cwe/cwe-798-hardcoded-credentials.d.ts +9 -0
  246. package/dist/rules/cwe/cwe-798-hardcoded-credentials.d.ts.map +1 -0
  247. package/dist/rules/cwe/cwe-798-hardcoded-credentials.js +58 -0
  248. package/dist/rules/cwe/cwe-798-hardcoded-credentials.js.map +1 -0
  249. package/dist/rules/cwe/cwe-862-missing-auth.d.ts +9 -0
  250. package/dist/rules/cwe/cwe-862-missing-auth.d.ts.map +1 -0
  251. package/dist/rules/cwe/cwe-862-missing-auth.js +55 -0
  252. package/dist/rules/cwe/cwe-862-missing-auth.js.map +1 -0
  253. package/dist/rules/cwe/cwe-863-incorrect-auth.d.ts +9 -0
  254. package/dist/rules/cwe/cwe-863-incorrect-auth.d.ts.map +1 -0
  255. package/dist/rules/cwe/cwe-863-incorrect-auth.js +58 -0
  256. package/dist/rules/cwe/cwe-863-incorrect-auth.js.map +1 -0
  257. package/dist/rules/cwe/cwe-89-sql-injection.d.ts +21 -0
  258. package/dist/rules/cwe/cwe-89-sql-injection.d.ts.map +1 -0
  259. package/dist/rules/cwe/cwe-89-sql-injection.js +456 -0
  260. package/dist/rules/cwe/cwe-89-sql-injection.js.map +1 -0
  261. package/dist/rules/cwe/cwe-918-ssrf.d.ts +9 -0
  262. package/dist/rules/cwe/cwe-918-ssrf.d.ts.map +1 -0
  263. package/dist/rules/cwe/cwe-918-ssrf.js +59 -0
  264. package/dist/rules/cwe/cwe-918-ssrf.js.map +1 -0
  265. package/dist/rules/cwe/cwe-94-code-injection.d.ts +9 -0
  266. package/dist/rules/cwe/cwe-94-code-injection.d.ts.map +1 -0
  267. package/dist/rules/cwe/cwe-94-code-injection.js +59 -0
  268. package/dist/rules/cwe/cwe-94-code-injection.js.map +1 -0
  269. package/dist/rules/cwe/index.d.ts +43 -0
  270. package/dist/rules/cwe/index.d.ts.map +1 -0
  271. package/dist/rules/cwe/index.js +99 -0
  272. package/dist/rules/cwe/index.js.map +1 -0
  273. package/dist/rules/engine/index.d.ts +10 -0
  274. package/dist/rules/engine/index.d.ts.map +1 -0
  275. package/dist/rules/engine/index.js +9 -0
  276. package/dist/rules/engine/index.js.map +1 -0
  277. package/dist/rules/engine/rule-context.d.ts +99 -0
  278. package/dist/rules/engine/rule-context.d.ts.map +1 -0
  279. package/dist/rules/engine/rule-context.js +175 -0
  280. package/dist/rules/engine/rule-context.js.map +1 -0
  281. package/dist/rules/engine/rule-engine.d.ts +132 -0
  282. package/dist/rules/engine/rule-engine.d.ts.map +1 -0
  283. package/dist/rules/engine/rule-engine.js +379 -0
  284. package/dist/rules/engine/rule-engine.js.map +1 -0
  285. package/dist/rules/engine/rule-registry.d.ts +133 -0
  286. package/dist/rules/engine/rule-registry.d.ts.map +1 -0
  287. package/dist/rules/engine/rule-registry.js +281 -0
  288. package/dist/rules/engine/rule-registry.js.map +1 -0
  289. package/dist/rules/index.d.ts +14 -0
  290. package/dist/rules/index.d.ts.map +1 -0
  291. package/dist/rules/index.js +16 -0
  292. package/dist/rules/index.js.map +1 -0
  293. package/dist/rules/owasp/a01-broken-access-control.d.ts +19 -0
  294. package/dist/rules/owasp/a01-broken-access-control.d.ts.map +1 -0
  295. package/dist/rules/owasp/a01-broken-access-control.js +295 -0
  296. package/dist/rules/owasp/a01-broken-access-control.js.map +1 -0
  297. package/dist/rules/owasp/a02-cryptographic-failures.d.ts +19 -0
  298. package/dist/rules/owasp/a02-cryptographic-failures.d.ts.map +1 -0
  299. package/dist/rules/owasp/a02-cryptographic-failures.js +327 -0
  300. package/dist/rules/owasp/a02-cryptographic-failures.js.map +1 -0
  301. package/dist/rules/owasp/a03-injection.d.ts +21 -0
  302. package/dist/rules/owasp/a03-injection.d.ts.map +1 -0
  303. package/dist/rules/owasp/a03-injection.js +342 -0
  304. package/dist/rules/owasp/a03-injection.js.map +1 -0
  305. package/dist/rules/owasp/a04-insecure-design.d.ts +19 -0
  306. package/dist/rules/owasp/a04-insecure-design.d.ts.map +1 -0
  307. package/dist/rules/owasp/a04-insecure-design.js +403 -0
  308. package/dist/rules/owasp/a04-insecure-design.js.map +1 -0
  309. package/dist/rules/owasp/a05-security-misconfiguration.d.ts +19 -0
  310. package/dist/rules/owasp/a05-security-misconfiguration.d.ts.map +1 -0
  311. package/dist/rules/owasp/a05-security-misconfiguration.js +371 -0
  312. package/dist/rules/owasp/a05-security-misconfiguration.js.map +1 -0
  313. package/dist/rules/owasp/a06-vulnerable-components.d.ts +18 -0
  314. package/dist/rules/owasp/a06-vulnerable-components.d.ts.map +1 -0
  315. package/dist/rules/owasp/a06-vulnerable-components.js +243 -0
  316. package/dist/rules/owasp/a06-vulnerable-components.js.map +1 -0
  317. package/dist/rules/owasp/a07-auth-failures.d.ts +19 -0
  318. package/dist/rules/owasp/a07-auth-failures.d.ts.map +1 -0
  319. package/dist/rules/owasp/a07-auth-failures.js +300 -0
  320. package/dist/rules/owasp/a07-auth-failures.js.map +1 -0
  321. package/dist/rules/owasp/a08-integrity-failures.d.ts +18 -0
  322. package/dist/rules/owasp/a08-integrity-failures.d.ts.map +1 -0
  323. package/dist/rules/owasp/a08-integrity-failures.js +306 -0
  324. package/dist/rules/owasp/a08-integrity-failures.js.map +1 -0
  325. package/dist/rules/owasp/a09-logging-failures.d.ts +18 -0
  326. package/dist/rules/owasp/a09-logging-failures.d.ts.map +1 -0
  327. package/dist/rules/owasp/a09-logging-failures.js +339 -0
  328. package/dist/rules/owasp/a09-logging-failures.js.map +1 -0
  329. package/dist/rules/owasp/a10-ssrf.d.ts +18 -0
  330. package/dist/rules/owasp/a10-ssrf.d.ts.map +1 -0
  331. package/dist/rules/owasp/a10-ssrf.js +349 -0
  332. package/dist/rules/owasp/a10-ssrf.js.map +1 -0
  333. package/dist/rules/owasp/index.d.ts +20 -0
  334. package/dist/rules/owasp/index.d.ts.map +1 -0
  335. package/dist/rules/owasp/index.js +53 -0
  336. package/dist/rules/owasp/index.js.map +1 -0
  337. package/dist/rules/types.d.ts +277 -0
  338. package/dist/rules/types.d.ts.map +1 -0
  339. package/dist/rules/types.js +34 -0
  340. package/dist/rules/types.js.map +1 -0
  341. package/dist/tests/integration/epic-integration.test.d.ts +7 -0
  342. package/dist/tests/integration/epic-integration.test.d.ts.map +1 -0
  343. package/dist/tests/integration/epic-integration.test.js +390 -0
  344. package/dist/tests/integration/epic-integration.test.js.map +1 -0
  345. package/dist/tests/rules/cwe/cwe-top25-1-13.test.d.ts +2 -0
  346. package/dist/tests/rules/cwe/cwe-top25-1-13.test.d.ts.map +1 -0
  347. package/dist/tests/rules/cwe/cwe-top25-1-13.test.js +154 -0
  348. package/dist/tests/rules/cwe/cwe-top25-1-13.test.js.map +1 -0
  349. package/dist/tests/rules/cwe/cwe-top25-14-25.test.d.ts +2 -0
  350. package/dist/tests/rules/cwe/cwe-top25-14-25.test.d.ts.map +1 -0
  351. package/dist/tests/rules/cwe/cwe-top25-14-25.test.js +121 -0
  352. package/dist/tests/rules/cwe/cwe-top25-14-25.test.js.map +1 -0
  353. package/dist/types/cve.d.ts +278 -0
  354. package/dist/types/cve.d.ts.map +1 -0
  355. package/dist/types/cve.js +7 -0
  356. package/dist/types/cve.js.map +1 -0
  357. package/dist/types/index.d.ts +2 -0
  358. package/dist/types/index.d.ts.map +1 -1
  359. package/dist/types/rule.d.ts +245 -0
  360. package/dist/types/rule.d.ts.map +1 -0
  361. package/dist/types/rule.js +7 -0
  362. package/dist/types/rule.js.map +1 -0
  363. package/package.json +1 -1
@@ -0,0 +1,396 @@
1
+ /**
2
+ * @fileoverview CPE (Common Platform Enumeration) Matching Engine
3
+ * @module @nahisaho/musubix-security/cve/cpe-matcher
4
+ *
5
+ * Provides npm package name to CPE conversion and semver-based
6
+ * vulnerability matching.
7
+ *
8
+ * @requirement REQ-CVE-003 - CPE matching for vulnerability lookup
9
+ * @design DES-EPIC2-004 - CPE Matcher component
10
+ */
11
+ /**
12
+ * Known npm package to vendor mappings
13
+ * Many npm packages use different names than their CPE vendor
14
+ */
15
+ const VENDOR_MAPPINGS = {
16
+ // Major frameworks
17
+ 'express': 'expressjs',
18
+ 'koa': 'koajs',
19
+ 'fastify': 'fastify',
20
+ 'next': 'vercel',
21
+ 'nuxt': 'nuxtjs',
22
+ 'gatsby': 'gatsbyjs',
23
+ // Utilities
24
+ 'lodash': 'lodash',
25
+ 'underscore': 'underscorejs',
26
+ 'moment': 'momentjs',
27
+ 'dayjs': 'dayjs',
28
+ // Security-related
29
+ 'jsonwebtoken': 'auth0',
30
+ 'passport': 'passportjs',
31
+ 'helmet': 'helmetjs',
32
+ // Database clients
33
+ 'mongoose': 'mongoosejs',
34
+ 'sequelize': 'sequelizejs',
35
+ 'typeorm': 'typeorm',
36
+ 'prisma': 'prisma',
37
+ 'pg': 'postgresql',
38
+ 'mysql2': 'mysql',
39
+ 'sqlite3': 'sqlite',
40
+ // Build tools
41
+ 'webpack': 'webpack',
42
+ 'vite': 'vitejs',
43
+ 'esbuild': 'esbuild',
44
+ 'rollup': 'rollupjs',
45
+ // Testing
46
+ 'jest': 'jestjs',
47
+ 'mocha': 'mochajs',
48
+ 'vitest': 'vitest',
49
+ // HTTP clients
50
+ 'axios': 'axios',
51
+ 'node-fetch': 'node-fetch',
52
+ 'got': 'sindresorhus',
53
+ // Template engines
54
+ 'pug': 'pugjs',
55
+ 'ejs': 'ejs',
56
+ 'handlebars': 'handlebarsjs',
57
+ // Validation
58
+ 'joi': 'hapijs',
59
+ 'yup': 'jquense',
60
+ 'zod': 'colinhacks',
61
+ // Crypto
62
+ 'bcrypt': 'bcrypt',
63
+ 'argon2': 'argon2',
64
+ 'crypto-js': 'crypto-js',
65
+ };
66
+ /**
67
+ * Packages that should be searched under 'node.js' vendor
68
+ */
69
+ const NODEJS_VENDOR_PACKAGES = new Set([
70
+ 'node',
71
+ 'npm',
72
+ 'npx',
73
+ ]);
74
+ /**
75
+ * CPE Matcher for npm packages
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * const matcher = new CPEMatcher();
80
+ *
81
+ * // Generate CPE from package
82
+ * const cpe = matcher.generateCPE('express', '4.18.2');
83
+ * // => 'cpe:2.3:a:expressjs:express:4.18.2:*:*:*:*:node.js:*:*'
84
+ *
85
+ * // Check if version is vulnerable
86
+ * const isVuln = matcher.isVersionVulnerable('4.18.2', {
87
+ * versionStart: '4.0.0',
88
+ * versionEnd: '4.19.0',
89
+ * versionEndExcluding: true
90
+ * });
91
+ * ```
92
+ */
93
+ export class CPEMatcher {
94
+ vendorMappings;
95
+ constructor(customMappings) {
96
+ this.vendorMappings = new Map([
97
+ ...Object.entries(VENDOR_MAPPINGS),
98
+ ...Object.entries(customMappings ?? {}),
99
+ ]);
100
+ }
101
+ /**
102
+ * Generate CPE 2.3 URI for an npm package
103
+ * @param packageName - npm package name
104
+ * @param version - Package version
105
+ * @returns CPE 2.3 formatted URI
106
+ */
107
+ generateCPE(packageName, version) {
108
+ const components = this.packageToCPEComponents(packageName, version);
109
+ return this.componentsToURI(components);
110
+ }
111
+ /**
112
+ * Convert npm package info to CPE components
113
+ */
114
+ packageToCPEComponents(packageName, version) {
115
+ const normalizedName = this.normalizeName(packageName);
116
+ const vendor = this.resolveVendor(packageName);
117
+ return {
118
+ part: 'a',
119
+ vendor,
120
+ product: normalizedName,
121
+ version: this.normalizeVersion(version),
122
+ targetSw: 'node.js',
123
+ };
124
+ }
125
+ /**
126
+ * Convert CPE components to URI string
127
+ */
128
+ componentsToURI(components) {
129
+ const parts = [
130
+ 'cpe:2.3',
131
+ components.part,
132
+ this.escapeComponent(components.vendor),
133
+ this.escapeComponent(components.product),
134
+ this.escapeComponent(components.version),
135
+ this.escapeComponent(components.update ?? '*'),
136
+ this.escapeComponent(components.edition ?? '*'),
137
+ this.escapeComponent(components.language ?? '*'),
138
+ this.escapeComponent(components.swEdition ?? '*'),
139
+ this.escapeComponent(components.targetSw ?? '*'),
140
+ this.escapeComponent(components.targetHw ?? '*'),
141
+ this.escapeComponent(components.other ?? '*'),
142
+ ];
143
+ return parts.join(':');
144
+ }
145
+ /**
146
+ * Parse CPE 2.3 URI to components
147
+ */
148
+ parseURI(cpeUri) {
149
+ const match = cpeUri.match(/^cpe:2\.3:([aoh]):([^:]+):([^:]+):([^:]+):([^:]*):([^:]*):([^:]*):([^:]*):([^:]*):([^:]*):([^:]*)$/);
150
+ if (!match) {
151
+ return null;
152
+ }
153
+ return {
154
+ part: match[1],
155
+ vendor: this.unescapeComponent(match[2]),
156
+ product: this.unescapeComponent(match[3]),
157
+ version: this.unescapeComponent(match[4]),
158
+ update: match[5] && match[5] !== '*' ? this.unescapeComponent(match[5]) : undefined,
159
+ edition: match[6] && match[6] !== '*' ? this.unescapeComponent(match[6]) : undefined,
160
+ language: match[7] && match[7] !== '*' ? this.unescapeComponent(match[7]) : undefined,
161
+ swEdition: match[8] && match[8] !== '*' ? this.unescapeComponent(match[8]) : undefined,
162
+ targetSw: match[9] && match[9] !== '*' ? this.unescapeComponent(match[9]) : undefined,
163
+ targetHw: match[10] && match[10] !== '*' ? this.unescapeComponent(match[10]) : undefined,
164
+ other: match[11] && match[11] !== '*' ? this.unescapeComponent(match[11]) : undefined,
165
+ };
166
+ }
167
+ /**
168
+ * Check if a version falls within a vulnerable range
169
+ * @param version - Version to check
170
+ * @param range - Version range from CVE data
171
+ * @returns True if version is within vulnerable range
172
+ */
173
+ isVersionVulnerable(version, range) {
174
+ const normalizedVersion = this.normalizeVersion(version);
175
+ // Handle "all versions" case
176
+ if (!range.versionStart && !range.versionEnd) {
177
+ return true;
178
+ }
179
+ const vStart = range.versionStart ? this.normalizeVersion(range.versionStart) : null;
180
+ const vEnd = range.versionEnd ? this.normalizeVersion(range.versionEnd) : null;
181
+ // Check start bound
182
+ if (vStart) {
183
+ const comparison = this.compareVersions(normalizedVersion, vStart);
184
+ if (range.versionStartExcluding) {
185
+ if (comparison <= 0)
186
+ return false;
187
+ }
188
+ else {
189
+ if (comparison < 0)
190
+ return false;
191
+ }
192
+ }
193
+ // Check end bound
194
+ if (vEnd) {
195
+ const comparison = this.compareVersions(normalizedVersion, vEnd);
196
+ if (range.versionEndExcluding) {
197
+ if (comparison >= 0)
198
+ return false;
199
+ }
200
+ else {
201
+ if (comparison > 0)
202
+ return false;
203
+ }
204
+ }
205
+ return true;
206
+ }
207
+ /**
208
+ * Match a package against CPE criteria
209
+ */
210
+ matchPackage(packageName, packageVersion, cpeMatch) {
211
+ const parsed = this.parseURI(cpeMatch.criteria);
212
+ if (!parsed) {
213
+ return null;
214
+ }
215
+ const normalizedName = this.normalizeName(packageName);
216
+ const expectedVendors = this.getPossibleVendors(packageName);
217
+ // Check if product matches
218
+ const productMatches = parsed.product === normalizedName ||
219
+ parsed.product === '*' ||
220
+ parsed.product.includes(normalizedName);
221
+ // Check if vendor matches
222
+ const vendorMatches = parsed.vendor === '*' ||
223
+ expectedVendors.some(v => parsed.vendor === v ||
224
+ parsed.vendor.includes(v) ||
225
+ v.includes(parsed.vendor));
226
+ if (!productMatches || !vendorMatches) {
227
+ return null;
228
+ }
229
+ // Calculate confidence based on match quality
230
+ let confidence = 0.5;
231
+ if (parsed.vendor !== '*' && expectedVendors.includes(parsed.vendor)) {
232
+ confidence += 0.25;
233
+ }
234
+ if (parsed.product === normalizedName) {
235
+ confidence += 0.25;
236
+ }
237
+ // Check version range
238
+ const versionRange = cpeMatch.versionRange;
239
+ let isVulnerable = cpeMatch.vulnerable;
240
+ if (versionRange) {
241
+ isVulnerable = isVulnerable && this.isVersionVulnerable(packageVersion, versionRange);
242
+ }
243
+ else if (parsed.version !== '*') {
244
+ // Exact version match
245
+ isVulnerable = isVulnerable && this.compareVersions(this.normalizeVersion(packageVersion), this.normalizeVersion(parsed.version)) === 0;
246
+ }
247
+ return {
248
+ packageName,
249
+ packageVersion,
250
+ cveId: '', // To be filled by caller
251
+ cpe: this.generateCPE(packageName, packageVersion),
252
+ matchCriteria: cpeMatch,
253
+ isVulnerable,
254
+ confidence,
255
+ };
256
+ }
257
+ /**
258
+ * Add a custom vendor mapping
259
+ */
260
+ addVendorMapping(packageName, vendor) {
261
+ this.vendorMappings.set(packageName.toLowerCase(), vendor);
262
+ }
263
+ /**
264
+ * Get the vendor for a package
265
+ */
266
+ getVendor(packageName) {
267
+ return this.resolveVendor(packageName);
268
+ }
269
+ /**
270
+ * Normalize package name for CPE
271
+ */
272
+ normalizeName(name) {
273
+ // Handle scoped packages (@org/package -> package)
274
+ const unscoped = name.startsWith('@') ? name.split('/')[1] : name;
275
+ // Convert to lowercase, replace special chars
276
+ return unscoped
277
+ .toLowerCase()
278
+ .replace(/[^a-z0-9]/g, '_')
279
+ .replace(/_+/g, '_')
280
+ .replace(/^_|_$/g, '');
281
+ }
282
+ /**
283
+ * Normalize version string
284
+ */
285
+ normalizeVersion(version) {
286
+ // Remove leading 'v' and any pre-release/build metadata for comparison
287
+ return version
288
+ .replace(/^v/, '')
289
+ .replace(/[+-].*$/, '') // Remove pre-release (-beta) and build (+build) metadata
290
+ .trim();
291
+ }
292
+ /**
293
+ * Resolve vendor for a package
294
+ */
295
+ resolveVendor(packageName) {
296
+ const normalized = packageName.toLowerCase();
297
+ // Check for scoped packages
298
+ if (normalized.startsWith('@')) {
299
+ const [scope] = normalized.slice(1).split('/');
300
+ // Use scope as vendor (without @)
301
+ return scope.replace(/[^a-z0-9]/g, '_');
302
+ }
303
+ // Check custom mappings
304
+ if (this.vendorMappings.has(normalized)) {
305
+ return this.vendorMappings.get(normalized);
306
+ }
307
+ // Check Node.js packages
308
+ if (NODEJS_VENDOR_PACKAGES.has(normalized)) {
309
+ return 'nodejs';
310
+ }
311
+ // Default: use package name as vendor
312
+ return this.normalizeName(packageName);
313
+ }
314
+ /**
315
+ * Get possible vendor names for a package
316
+ */
317
+ getPossibleVendors(packageName) {
318
+ const vendors = new Set();
319
+ const normalized = packageName.toLowerCase();
320
+ // Add resolved vendor
321
+ vendors.add(this.resolveVendor(packageName));
322
+ // Add normalized name
323
+ vendors.add(this.normalizeName(packageName));
324
+ // Add common variations
325
+ if (normalized.endsWith('js')) {
326
+ vendors.add(normalized.slice(0, -2));
327
+ }
328
+ if (!normalized.endsWith('js')) {
329
+ vendors.add(`${normalized}js`);
330
+ }
331
+ return Array.from(vendors);
332
+ }
333
+ /**
334
+ * Compare two semver versions
335
+ * @returns -1 if a < b, 0 if a == b, 1 if a > b
336
+ */
337
+ compareVersions(a, b) {
338
+ const partsA = a.split('.').map(p => parseInt(p, 10) || 0);
339
+ const partsB = b.split('.').map(p => parseInt(p, 10) || 0);
340
+ const maxLen = Math.max(partsA.length, partsB.length);
341
+ for (let i = 0; i < maxLen; i++) {
342
+ const partA = partsA[i] ?? 0;
343
+ const partB = partsB[i] ?? 0;
344
+ if (partA < partB)
345
+ return -1;
346
+ if (partA > partB)
347
+ return 1;
348
+ }
349
+ return 0;
350
+ }
351
+ /**
352
+ * Escape special characters in CPE component
353
+ */
354
+ escapeComponent(value) {
355
+ if (value === '*' || value === '-') {
356
+ return value;
357
+ }
358
+ return value
359
+ .replace(/\\/g, '\\\\')
360
+ .replace(/\*/g, '\\*')
361
+ .replace(/\?/g, '\\?');
362
+ }
363
+ /**
364
+ * Unescape CPE component value
365
+ */
366
+ unescapeComponent(value) {
367
+ if (value === '*' || value === '-') {
368
+ return value;
369
+ }
370
+ return value
371
+ .replace(/\\\\/g, '\\')
372
+ .replace(/\\\*/g, '*')
373
+ .replace(/\\\?/g, '?');
374
+ }
375
+ }
376
+ /**
377
+ * Create a CPE search query from package info
378
+ * Generates wildcarded CPE for searching NVD
379
+ */
380
+ export function createCPESearchQuery(packageName, vendor) {
381
+ const matcher = new CPEMatcher();
382
+ const normalizedName = packageName
383
+ .toLowerCase()
384
+ .replace(/[^a-z0-9]/g, '_');
385
+ const resolvedVendor = vendor ?? matcher.getVendor(packageName);
386
+ return `cpe:2.3:a:${resolvedVendor}:${normalizedName}:*:*:*:*:*:*:*:*`;
387
+ }
388
+ /**
389
+ * Extract package name from CPE URI
390
+ */
391
+ export function extractPackageFromCPE(cpeUri) {
392
+ const matcher = new CPEMatcher();
393
+ const parsed = matcher.parseURI(cpeUri);
394
+ return parsed?.product ?? null;
395
+ }
396
+ //# sourceMappingURL=cpe-matcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cpe-matcher.js","sourceRoot":"","sources":["../../src/cve/cpe-matcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,225 @@
1
+ /**
2
+ * @fileoverview CVE Cache with SQLite storage
3
+ * @module @nahisaho/musubix-security/cve/cve-cache
4
+ * @description Provides persistent caching for CVE data to reduce NVD API calls
5
+ * @requirements REQ-SEC-CVE-002 - Rate limiting and caching for NVD API
6
+ * @design DES-SEC-CVE-002 - CVE cache with configurable TTL
7
+ * @task TSK-CVE-007 - SQLite キャッシュ
8
+ */
9
+ import type { CVE } from '../types/cve.js';
10
+ /**
11
+ * Cache entry with metadata
12
+ */
13
+ export interface CacheEntry<T> {
14
+ /** Cached data */
15
+ data: T;
16
+ /** Timestamp when the entry was created */
17
+ createdAt: number;
18
+ /** Timestamp when the entry expires */
19
+ expiresAt: number;
20
+ /** Optional ETag for conditional requests */
21
+ etag?: string;
22
+ }
23
+ /**
24
+ * CVE Cache configuration options
25
+ */
26
+ export interface CVECacheOptions {
27
+ /** Path to the SQLite database file */
28
+ dbPath?: string;
29
+ /** Default TTL in milliseconds (default: 24 hours) */
30
+ defaultTTL?: number;
31
+ /** Maximum number of entries (default: 10000) */
32
+ maxEntries?: number;
33
+ /** Enable automatic cleanup (default: true) */
34
+ autoCleanup?: boolean;
35
+ /** Cleanup interval in milliseconds (default: 1 hour) */
36
+ cleanupInterval?: number;
37
+ }
38
+ /**
39
+ * Cache statistics
40
+ */
41
+ export interface CacheStats {
42
+ /** Total number of entries */
43
+ totalEntries: number;
44
+ /** Number of expired entries */
45
+ expiredEntries: number;
46
+ /** Number of valid entries */
47
+ validEntries: number;
48
+ /** Cache hit rate */
49
+ hitRate: number;
50
+ /** Total cache size in bytes */
51
+ sizeBytes: number;
52
+ /** Oldest entry timestamp */
53
+ oldestEntry: number | null;
54
+ /** Newest entry timestamp */
55
+ newestEntry: number | null;
56
+ }
57
+ /**
58
+ * CVE Cache implementation using file-based JSON storage
59
+ * @description Uses JSON files for persistence to avoid native module dependencies
60
+ */
61
+ export declare class CVECache {
62
+ private readonly dbPath;
63
+ private readonly defaultTTL;
64
+ private readonly maxEntries;
65
+ private readonly autoCleanup;
66
+ private readonly cleanupInterval;
67
+ private cleanupTimer?;
68
+ private metrics;
69
+ private cache;
70
+ /**
71
+ * Default 24 hours TTL
72
+ */
73
+ static readonly DEFAULT_TTL: number;
74
+ /**
75
+ * Default maximum entries
76
+ */
77
+ static readonly DEFAULT_MAX_ENTRIES = 10000;
78
+ /**
79
+ * Default cleanup interval (1 hour)
80
+ */
81
+ static readonly DEFAULT_CLEANUP_INTERVAL: number;
82
+ constructor(options?: CVECacheOptions);
83
+ /**
84
+ * Initialize storage directory and file
85
+ */
86
+ private initializeStorage;
87
+ /**
88
+ * Load cache from disk
89
+ */
90
+ private loadFromDisk;
91
+ /**
92
+ * Save cache to disk
93
+ */
94
+ private saveToDisk;
95
+ /**
96
+ * Start automatic cleanup timer
97
+ */
98
+ private startCleanupTimer;
99
+ /**
100
+ * Stop automatic cleanup timer
101
+ */
102
+ private stopCleanupTimer;
103
+ /**
104
+ * Generate cache key for CVE ID
105
+ */
106
+ private cveKey;
107
+ /**
108
+ * Generate cache key for CPE search
109
+ */
110
+ private cpeKey;
111
+ /**
112
+ * Generate cache key for keyword search
113
+ */
114
+ private keywordKey;
115
+ /**
116
+ * Get a CVE from cache
117
+ * @param cveId - CVE identifier (e.g., CVE-2024-12345)
118
+ * @returns Cached CVE or undefined if not found/expired
119
+ */
120
+ getCVE(cveId: string): CVE | undefined;
121
+ /**
122
+ * Store a CVE in cache
123
+ * @param cve - CVE to cache
124
+ * @param ttl - Optional custom TTL in milliseconds
125
+ * @param etag - Optional ETag for conditional requests
126
+ */
127
+ setCVE(cve: CVE, ttl?: number, etag?: string): void;
128
+ /**
129
+ * Get CVEs for a CPE from cache
130
+ * @param cpeName - CPE name string
131
+ * @returns Cached CVE array or undefined
132
+ */
133
+ getCVEsByCPE(cpeName: string): CVE[] | undefined;
134
+ /**
135
+ * Store CVEs for a CPE in cache
136
+ * @param cpeName - CPE name string
137
+ * @param cves - Array of CVEs to cache
138
+ * @param ttl - Optional custom TTL
139
+ */
140
+ setCVEsByCPE(cpeName: string, cves: CVE[], ttl?: number): void;
141
+ /**
142
+ * Get CVEs for a keyword search from cache
143
+ * @param keyword - Search keyword
144
+ * @returns Cached CVE array or undefined
145
+ */
146
+ getCVEsByKeyword(keyword: string): CVE[] | undefined;
147
+ /**
148
+ * Store CVEs for a keyword search in cache
149
+ * @param keyword - Search keyword
150
+ * @param cves - Array of CVEs to cache
151
+ * @param ttl - Optional custom TTL (shorter recommended for searches)
152
+ */
153
+ setCVEsByKeyword(keyword: string, cves: CVE[], ttl?: number): void;
154
+ /**
155
+ * Check if a CVE is in cache and not expired
156
+ * @param cveId - CVE identifier
157
+ * @returns true if cached and valid
158
+ */
159
+ hasCVE(cveId: string): boolean;
160
+ /**
161
+ * Delete a CVE from cache
162
+ * @param cveId - CVE identifier
163
+ * @returns true if entry was deleted
164
+ */
165
+ deleteCVE(cveId: string): boolean;
166
+ /**
167
+ * Get cache entry metadata
168
+ * @param cveId - CVE identifier
169
+ * @returns Cache entry metadata or undefined
170
+ */
171
+ getCVEMetadata(cveId: string): Omit<CacheEntry<unknown>, 'data'> | undefined;
172
+ /**
173
+ * Remove expired entries
174
+ * @returns Number of entries removed
175
+ */
176
+ cleanup(): number;
177
+ /**
178
+ * Enforce maximum entries limit (LRU eviction)
179
+ */
180
+ private enforceMaxEntries;
181
+ /**
182
+ * Clear all entries
183
+ */
184
+ clear(): void;
185
+ /**
186
+ * Get cache statistics
187
+ */
188
+ getStats(): CacheStats;
189
+ /**
190
+ * Close cache and cleanup resources
191
+ */
192
+ close(): void;
193
+ /**
194
+ * Batch get multiple CVEs
195
+ * @param cveIds - Array of CVE identifiers
196
+ * @returns Map of CVE ID to CVE (only found entries)
197
+ */
198
+ getMultipleCVEs(cveIds: string[]): Map<string, CVE>;
199
+ /**
200
+ * Batch set multiple CVEs
201
+ * @param cves - Array of CVEs to cache
202
+ * @param ttl - Optional custom TTL
203
+ */
204
+ setMultipleCVEs(cves: CVE[], ttl?: number): void;
205
+ /**
206
+ * Touch a cache entry to extend its TTL
207
+ * @param cveId - CVE identifier
208
+ * @param ttl - Optional new TTL
209
+ * @returns true if entry was touched
210
+ */
211
+ touchCVE(cveId: string, ttl?: number): boolean;
212
+ }
213
+ /**
214
+ * Create a CVE cache with memory-only storage (no persistence)
215
+ */
216
+ export declare function createMemoryCache(options?: Omit<CVECacheOptions, 'dbPath'>): CVECache;
217
+ /**
218
+ * Get or create the default cache instance
219
+ */
220
+ export declare function getDefaultCache(): CVECache;
221
+ /**
222
+ * Close the default cache instance
223
+ */
224
+ export declare function closeDefaultCache(): void;
225
+ //# sourceMappingURL=cve-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cve-cache.d.ts","sourceRoot":"","sources":["../../src/cve/cve-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,kBAAkB;IAClB,IAAI,EAAE,CAAC,CAAC;IACR,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yDAAyD;IACzD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,6BAA6B;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAUD;;;GAGG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,YAAY,CAAC,CAAiC;IACtD,OAAO,CAAC,OAAO,CAAwC;IAGvD,OAAO,CAAC,KAAK,CAA+C;IAE5D;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,WAAW,SAAuB;IAElD;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,mBAAmB,SAAS;IAE5C;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,wBAAwB,SAAkB;gBAE9C,OAAO,GAAE,eAAoB;IAezC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,OAAO,CAAC,UAAU;IASlB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,MAAM;IAId;;OAEG;IACH,OAAO,CAAC,MAAM;IAId;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS;IAmBtC;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAenD;;;;OAIG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,EAAE,GAAG,SAAS;IAmBhD;;;;;OAKG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAc9D;;;;OAIG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,EAAE,GAAG,SAAS;IAmBpD;;;;;OAKG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAgBlE;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAO9B;;;;OAIG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IASjC;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,GAAG,SAAS;IAY5E;;;OAGG;IACH,OAAO,IAAI,MAAM;IAiBjB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,QAAQ,IAAI,UAAU;IAwCtB;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;IAWnD;;;;OAIG;IACH,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAehD;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO;CAS/C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAOrF;AAOD;;GAEG;AACH,wBAAgB,eAAe,IAAI,QAAQ,CAK1C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC"}