@cdxgen/cdxgen 0.0.1 → 13.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (722) hide show
  1. package/README.md +921 -87
  2. package/bin/audit.js +239 -0
  3. package/bin/cdxgen.js +2324 -0
  4. package/bin/convert.js +213 -0
  5. package/bin/evinse.js +353 -0
  6. package/bin/hbom.js +495 -0
  7. package/bin/repl.js +2224 -0
  8. package/bin/sign.js +195 -0
  9. package/bin/tracebom.js +295 -0
  10. package/bin/validate.js +268 -0
  11. package/bin/verify.js +189 -0
  12. package/data/README.md +307 -0
  13. package/data/bom-1.4.schema.json +1605 -0
  14. package/data/bom-1.5.schema.json +3660 -0
  15. package/data/bom-1.6.schema.json +5511 -0
  16. package/data/bom-1.7.schema.json +6700 -0
  17. package/data/cbomosdb-queries.json +68 -0
  18. package/data/component-tags.json +339 -0
  19. package/data/container-knowledge-index.json +125 -0
  20. package/data/cosdb-queries.json +17 -0
  21. package/data/crypto-oid.json +1998 -0
  22. package/data/cryptography-defs.json +3793 -0
  23. package/data/cryptography-defs.schema.json +576 -0
  24. package/data/cyclonedx-2.0-bundled.schema.json +7182 -0
  25. package/data/frameworks-list.json +219 -0
  26. package/data/glibc-stdlib.json +117 -0
  27. package/data/gtfobins-index.json +6296 -0
  28. package/data/helpers/init.gradle +71 -0
  29. package/data/jsf-0.82.schema.json +211 -0
  30. package/data/known-licenses.json +82 -0
  31. package/data/lic-mapping.json +338 -0
  32. package/data/license-aliases.json +6624 -0
  33. package/data/license-db.json +39059 -0
  34. package/data/license-deprecations.json +302 -0
  35. package/data/lolbas-index.json +150 -0
  36. package/data/predictive-audit-allowlist.json +11 -0
  37. package/data/pypi-pkg-aliases.json +1199 -0
  38. package/data/python-stdlib.json +308 -0
  39. package/data/queries-darwin.json +193 -0
  40. package/data/queries-win.json +257 -0
  41. package/data/queries.json +268 -0
  42. package/data/ruby-known-modules.json +281 -0
  43. package/data/rules/ai-agent-governance.yaml +323 -0
  44. package/data/rules/ai-bom.yaml +268 -0
  45. package/data/rules/ai-oversight.yaml +186 -0
  46. package/data/rules/ai-provenance.yaml +92 -0
  47. package/data/rules/asar-archives.yaml +150 -0
  48. package/data/rules/cbom-security.yaml +165 -0
  49. package/data/rules/chrome-extensions.yaml +248 -0
  50. package/data/rules/ci-permissions.yaml +802 -0
  51. package/data/rules/container-risk.yaml +353 -0
  52. package/data/rules/dependency-sources.yaml +236 -0
  53. package/data/rules/golem-go.yaml +229 -0
  54. package/data/rules/hbom-compliance.yaml +325 -0
  55. package/data/rules/hbom-performance.yaml +307 -0
  56. package/data/rules/hbom-security.yaml +248 -0
  57. package/data/rules/host-topology.yaml +165 -0
  58. package/data/rules/mcp-servers.yaml +388 -0
  59. package/data/rules/obom-runtime.yaml +1776 -0
  60. package/data/rules/package-integrity.yaml +364 -0
  61. package/data/rules/rootfs-hardening.yaml +179 -0
  62. package/data/rules/vscode-extensions.yaml +237 -0
  63. package/data/spdx-export.schema.json +6794 -0
  64. package/data/spdx-license-list.json +7449 -0
  65. package/data/spdx-licenses.json +759 -0
  66. package/data/spdx.schema.json +819 -0
  67. package/data/templates/README.md +3 -0
  68. package/data/templates/asvs-4.0.3.cdx.json +2943 -0
  69. package/data/templates/asvs-5.0.cdx.json +3046 -0
  70. package/data/templates/bsimm-v13.cdx.json +1008 -0
  71. package/data/templates/masvs-2.0.0.cdx.json +225 -0
  72. package/data/templates/nist-ssdf-1.1.cdx.json +828 -0
  73. package/data/templates/pcissc-secure-slc-1.1.cdx.json +1027 -0
  74. package/data/templates/scvs-1.0.0.cdx.json +813 -0
  75. package/data/templates/ssaf-DRAFT-2023-11.cdx.json +127 -0
  76. package/data/vendor-alias.json +41967 -0
  77. package/data/wrapdb-releases.json +4227 -0
  78. package/index.cjs +15 -0
  79. package/lib/audit/index.js +2800 -0
  80. package/lib/audit/progress.js +114 -0
  81. package/lib/audit/reporters.js +937 -0
  82. package/lib/audit/scoring.js +560 -0
  83. package/lib/audit/targets.js +798 -0
  84. package/lib/cli/bomAssembly.js +1833 -0
  85. package/lib/cli/cliOptions.js +513 -0
  86. package/lib/cli/index.js +2759 -0
  87. package/lib/cli/jsBom.js +2087 -0
  88. package/lib/cli/jvmBom.js +1858 -0
  89. package/lib/cli/managedBom.js +2083 -0
  90. package/lib/cli/nativeBom.js +2125 -0
  91. package/lib/core/activity.js +1087 -0
  92. package/lib/core/env.js +719 -0
  93. package/lib/core/fs.js +1058 -0
  94. package/lib/core/httpClient.js +730 -0
  95. package/lib/core/logger.js +142 -0
  96. package/lib/core/parallel.js +323 -0
  97. package/lib/core/paths.js +70 -0
  98. package/lib/core/projectConfig.js +122 -0
  99. package/lib/core/propertySanitizer.js +174 -0
  100. package/lib/core/spdx.js +5 -0
  101. package/lib/core/state.js +59 -0
  102. package/lib/core/text.js +207 -0
  103. package/lib/core/ui.js +876 -0
  104. package/lib/core/urls.js +84 -0
  105. package/lib/ecosystems/asarutils.js +1636 -0
  106. package/lib/ecosystems/bunutils.js +402 -0
  107. package/lib/ecosystems/caxa.js +77 -0
  108. package/lib/ecosystems/chromextutils.js +1174 -0
  109. package/lib/ecosystems/cmakeResolver.js +587 -0
  110. package/lib/ecosystems/cppEvidence.js +305 -0
  111. package/lib/ecosystems/denoutils.js +1094 -0
  112. package/lib/ecosystems/dotnetutils.js +132 -0
  113. package/lib/ecosystems/ecosystems.js +2772 -0
  114. package/lib/ecosystems/golem.js +1807 -0
  115. package/lib/ecosystems/gradleutils.js +1048 -0
  116. package/lib/ecosystems/jsEvidence.js +317 -0
  117. package/lib/ecosystems/npmutils.js +586 -0
  118. package/lib/ecosystems/parsers-bazel.js +875 -0
  119. package/lib/ecosystems/parsers-dotnet.js +1430 -0
  120. package/lib/ecosystems/parsers-gleam.js +302 -0
  121. package/lib/ecosystems/parsers-go.js +818 -0
  122. package/lib/ecosystems/parsers-js.js +4222 -0
  123. package/lib/ecosystems/parsers-jvm.js +948 -0
  124. package/lib/ecosystems/parsers-misc.js +3191 -0
  125. package/lib/ecosystems/parsers-python.js +2070 -0
  126. package/lib/ecosystems/parsers-rust.js +1294 -0
  127. package/lib/ecosystems/parsers-zig.js +861 -0
  128. package/lib/ecosystems/pep770.js +341 -0
  129. package/lib/ecosystems/pylockutils.js +427 -0
  130. package/lib/ecosystems/pythonutils.js +1281 -0
  131. package/lib/ecosystems/registryProvenance.js +1003 -0
  132. package/lib/ecosystems/remote/huggingface.js +1343 -0
  133. package/lib/ecosystems/rubyutils.js +1629 -0
  134. package/lib/ecosystems/rusi.js +820 -0
  135. package/lib/ecosystems/sbtutils.js +972 -0
  136. package/lib/ecosystems/tea.js +607 -0
  137. package/lib/ecosystems/utils.js +575 -0
  138. package/lib/ecosystems/zigResolver.js +410 -0
  139. package/lib/evinser/db.js +145 -0
  140. package/lib/evinser/evinser.js +2362 -0
  141. package/lib/evinser/scalasem.js +65 -0
  142. package/lib/evinser/swiftsem.js +767 -0
  143. package/lib/helpers/annotationFormatter.js +84 -0
  144. package/lib/helpers/bomSigner.js +312 -0
  145. package/lib/helpers/exportUtils.js +160 -0
  146. package/lib/helpers/remote/dependency-track.js +117 -0
  147. package/lib/helpers/versutils.js +202 -0
  148. package/lib/helpers/vsixutils.js +1069 -0
  149. package/lib/inventory/agentFormulationParser.js +322 -0
  150. package/lib/inventory/aiCollector.js +2140 -0
  151. package/lib/inventory/aiInventory.js +414 -0
  152. package/lib/inventory/aiModelVariants.js +121 -0
  153. package/lib/inventory/aiOversightCollector.js +661 -0
  154. package/lib/inventory/aiProvenanceCollector.js +822 -0
  155. package/lib/inventory/analyzer.js +6089 -0
  156. package/lib/inventory/analyzerScope.js +807 -0
  157. package/lib/inventory/astWorker.js +20 -0
  158. package/lib/inventory/atomUtils.js +1092 -0
  159. package/lib/inventory/auditCategories.js +192 -0
  160. package/lib/inventory/bomUtils.js +369 -0
  161. package/lib/inventory/cacheCommands.js +182 -0
  162. package/lib/inventory/cacheDir.js +104 -0
  163. package/lib/inventory/cbomutils.js +590 -0
  164. package/lib/inventory/cdxrs.js +434 -0
  165. package/lib/inventory/ciParsers/azurePipelines.js +295 -0
  166. package/lib/inventory/ciParsers/circleCi.js +286 -0
  167. package/lib/inventory/ciParsers/common.js +24 -0
  168. package/lib/inventory/ciParsers/githubActions.js +2434 -0
  169. package/lib/inventory/ciParsers/gitlabCi.js +213 -0
  170. package/lib/inventory/ciParsers/jenkins.js +180 -0
  171. package/lib/inventory/citations.js +234 -0
  172. package/lib/inventory/communityAiConfigParser.js +756 -0
  173. package/lib/inventory/containerRisk.js +204 -0
  174. package/lib/inventory/cryptoAlgorithmFamily.js +258 -0
  175. package/lib/inventory/deps.js +807 -0
  176. package/lib/inventory/depsUtils.js +588 -0
  177. package/lib/inventory/display.js +2128 -0
  178. package/lib/inventory/dosai.js +601 -0
  179. package/lib/inventory/dosaiParsers.js +154 -0
  180. package/lib/inventory/dynamic.js +145 -0
  181. package/lib/inventory/envcontext.js +1789 -0
  182. package/lib/inventory/evidenceUtils.js +774 -0
  183. package/lib/inventory/fetchBatch.js +779 -0
  184. package/lib/inventory/fetchRate.js +255 -0
  185. package/lib/inventory/forgeEnricher.js +300 -0
  186. package/lib/inventory/formulationParsers.js +422 -0
  187. package/lib/inventory/gtfobins.js +339 -0
  188. package/lib/inventory/hbom.js +719 -0
  189. package/lib/inventory/hbomAnalysis.js +310 -0
  190. package/lib/inventory/hbomLoader.js +35 -0
  191. package/lib/inventory/hostTopology.js +835 -0
  192. package/lib/inventory/inventoryStats.js +100 -0
  193. package/lib/inventory/jsonLike.js +121 -0
  194. package/lib/inventory/licenseEnhancer.js +918 -0
  195. package/lib/inventory/lolbas.js +285 -0
  196. package/lib/inventory/mcp.js +253 -0
  197. package/lib/inventory/mcpConfigParser.js +683 -0
  198. package/lib/inventory/mcpDiscovery.js +112 -0
  199. package/lib/inventory/mcpPinning.js +209 -0
  200. package/lib/inventory/osPackageResolver.js +493 -0
  201. package/lib/inventory/osinfo.js +277 -0
  202. package/lib/inventory/osqueryTransform.js +274 -0
  203. package/lib/inventory/plugins.js +466 -0
  204. package/lib/inventory/protobom.js +231 -0
  205. package/lib/inventory/protobomLoader.js +43 -0
  206. package/lib/inventory/provenanceUtils.js +224 -0
  207. package/lib/inventory/purl.js +749 -0
  208. package/lib/inventory/rustFormulationParser.js +339 -0
  209. package/lib/inventory/sbomDocument.js +340 -0
  210. package/lib/inventory/source.js +1488 -0
  211. package/lib/inventory/spdx.js +361 -0
  212. package/lib/inventory/spdxExpression.js +512 -0
  213. package/lib/inventory/spdxUtils.js +107 -0
  214. package/lib/inventory/table.js +263 -0
  215. package/lib/inventory/traceRunner.js +439 -0
  216. package/lib/inventory/unicodeScan.js +147 -0
  217. package/lib/managers/binary.js +3307 -0
  218. package/lib/managers/containerutils.js +125 -0
  219. package/lib/managers/docker.js +2145 -0
  220. package/lib/managers/dockerConnection.js +162 -0
  221. package/lib/managers/oci.js +704 -0
  222. package/lib/managers/piptree.js +267 -0
  223. package/lib/parsers/cmakeCache.js +199 -0
  224. package/lib/parsers/gguf.js +492 -0
  225. package/lib/parsers/gitAiNotes.js +233 -0
  226. package/lib/parsers/gitmodules.js +239 -0
  227. package/lib/parsers/htmlExtract.js +610 -0
  228. package/lib/parsers/huggingfaceManifest.js +551 -0
  229. package/lib/parsers/huggingfaceUtils.js +506 -0
  230. package/lib/parsers/iri.js +618 -0
  231. package/lib/parsers/npmrc.js +99 -0
  232. package/lib/parsers/ollama.js +101 -0
  233. package/lib/parsers/xml.js +841 -0
  234. package/lib/server/openapi.yaml +433 -0
  235. package/lib/server/server.js +616 -0
  236. package/lib/stages/postgen/annotator.js +977 -0
  237. package/lib/stages/postgen/auditBom.js +468 -0
  238. package/lib/stages/postgen/postgen.js +1239 -0
  239. package/lib/stages/postgen/ruleEngine.js +731 -0
  240. package/lib/stages/postgen/sortBom.js +195 -0
  241. package/lib/stages/postgen/spdxConverter.js +796 -0
  242. package/lib/stages/postgen/specVersionCompat.js +703 -0
  243. package/lib/stages/pregen/envAudit.js +388 -0
  244. package/lib/stages/pregen/pregen.js +637 -0
  245. package/lib/third-party/README.md +9 -0
  246. package/lib/third-party/arborist/CHANGELOG.md +1109 -0
  247. package/lib/third-party/arborist/LICENSE.md +20 -0
  248. package/lib/third-party/arborist/README.md +315 -0
  249. package/lib/third-party/arborist/lib/arborist/index.js +258 -0
  250. package/lib/third-party/arborist/lib/arborist/load-actual.js +605 -0
  251. package/lib/third-party/arborist/lib/arborist/load-virtual.js +300 -0
  252. package/lib/third-party/arborist/lib/bin-links.js +120 -0
  253. package/lib/third-party/arborist/lib/calc-dep-flags.js +130 -0
  254. package/lib/third-party/arborist/lib/case-insensitive-map.js +51 -0
  255. package/lib/third-party/arborist/lib/consistent-resolve.js +42 -0
  256. package/lib/third-party/arborist/lib/debug.js +50 -0
  257. package/lib/third-party/arborist/lib/dep-valid.js +190 -0
  258. package/lib/third-party/arborist/lib/edge.js +417 -0
  259. package/lib/third-party/arborist/lib/from-path.js +36 -0
  260. package/lib/third-party/arborist/lib/gather-dep-set.js +43 -0
  261. package/lib/third-party/arborist/lib/index.js +22 -0
  262. package/lib/third-party/arborist/lib/inventory.js +138 -0
  263. package/lib/third-party/arborist/lib/link.js +169 -0
  264. package/lib/third-party/arborist/lib/node.js +1673 -0
  265. package/lib/third-party/arborist/lib/npm-extension.js +45 -0
  266. package/lib/third-party/arborist/lib/override-resolves.js +11 -0
  267. package/lib/third-party/arborist/lib/override-set.js +319 -0
  268. package/lib/third-party/arborist/lib/package-extensions.js +289 -0
  269. package/lib/third-party/arborist/lib/printable.js +210 -0
  270. package/lib/third-party/arborist/lib/proc-log.js +30 -0
  271. package/lib/third-party/arborist/lib/realpath.js +100 -0
  272. package/lib/third-party/arborist/lib/relpath.js +4 -0
  273. package/lib/third-party/arborist/lib/shrinkwrap.js +1291 -0
  274. package/lib/third-party/arborist/lib/spec-from-lock.js +34 -0
  275. package/lib/third-party/arborist/lib/tree-check.js +165 -0
  276. package/lib/third-party/arborist/lib/validate-npm-package-name.js +107 -0
  277. package/lib/third-party/arborist/lib/version-from-tgz.js +51 -0
  278. package/lib/third-party/arborist/lib/yarn-lock.js +397 -0
  279. package/lib/validator/bomValidator.js +985 -0
  280. package/lib/validator/complianceEngine.js +241 -0
  281. package/lib/validator/complianceRules.js +1680 -0
  282. package/lib/validator/generated/runtime.mjs +17 -0
  283. package/lib/validator/generated/validate-1.6.mjs +21258 -0
  284. package/lib/validator/generated/validate-1.7.mjs +24803 -0
  285. package/lib/validator/generated/validate-2.0.mjs +22931 -0
  286. package/lib/validator/index.js +246 -0
  287. package/lib/validator/reporters/annotations.js +142 -0
  288. package/lib/validator/reporters/console.js +160 -0
  289. package/lib/validator/reporters/index.js +41 -0
  290. package/lib/validator/reporters/json.js +37 -0
  291. package/lib/validator/reporters/sarif.js +184 -0
  292. package/package.json +209 -26
  293. package/types/bin/audit.d.ts +3 -0
  294. package/types/bin/audit.d.ts.map +1 -0
  295. package/types/bin/cdxgen.d.ts +3 -0
  296. package/types/bin/cdxgen.d.ts.map +1 -0
  297. package/types/bin/convert.d.ts +3 -0
  298. package/types/bin/convert.d.ts.map +1 -0
  299. package/types/bin/evinse.d.ts +3 -0
  300. package/types/bin/evinse.d.ts.map +1 -0
  301. package/types/bin/hbom.d.ts +3 -0
  302. package/types/bin/hbom.d.ts.map +1 -0
  303. package/types/bin/repl.d.ts +3 -0
  304. package/types/bin/repl.d.ts.map +1 -0
  305. package/types/bin/sign.d.ts +3 -0
  306. package/types/bin/sign.d.ts.map +1 -0
  307. package/types/bin/tracebom.d.ts +3 -0
  308. package/types/bin/tracebom.d.ts.map +1 -0
  309. package/types/bin/validate.d.ts +14 -0
  310. package/types/bin/validate.d.ts.map +1 -0
  311. package/types/bin/verify.d.ts +3 -0
  312. package/types/bin/verify.d.ts.map +1 -0
  313. package/types/lib/audit/index.d.ts +153 -0
  314. package/types/lib/audit/index.d.ts.map +1 -0
  315. package/types/lib/audit/progress.d.ts +31 -0
  316. package/types/lib/audit/progress.d.ts.map +1 -0
  317. package/types/lib/audit/reporters.d.ts +62 -0
  318. package/types/lib/audit/reporters.d.ts.map +1 -0
  319. package/types/lib/audit/scoring.d.ts +36 -0
  320. package/types/lib/audit/scoring.d.ts.map +1 -0
  321. package/types/lib/audit/targets.d.ts +77 -0
  322. package/types/lib/audit/targets.d.ts.map +1 -0
  323. package/types/lib/cli/bomAssembly.d.ts +315 -0
  324. package/types/lib/cli/bomAssembly.d.ts.map +1 -0
  325. package/types/lib/cli/cliOptions.d.ts +156 -0
  326. package/types/lib/cli/cliOptions.d.ts.map +1 -0
  327. package/types/lib/cli/index.d.ts +107 -0
  328. package/types/lib/cli/index.d.ts.map +1 -0
  329. package/types/lib/cli/jsBom.d.ts +94 -0
  330. package/types/lib/cli/jsBom.d.ts.map +1 -0
  331. package/types/lib/cli/jvmBom.d.ts +54 -0
  332. package/types/lib/cli/jvmBom.d.ts.map +1 -0
  333. package/types/lib/cli/managedBom.d.ts +105 -0
  334. package/types/lib/cli/managedBom.d.ts.map +1 -0
  335. package/types/lib/cli/nativeBom.d.ts +143 -0
  336. package/types/lib/cli/nativeBom.d.ts.map +1 -0
  337. package/types/lib/core/activity.d.ts +178 -0
  338. package/types/lib/core/activity.d.ts.map +1 -0
  339. package/types/lib/core/env.d.ts +192 -0
  340. package/types/lib/core/env.d.ts.map +1 -0
  341. package/types/lib/core/fs.d.ts +158 -0
  342. package/types/lib/core/fs.d.ts.map +1 -0
  343. package/types/lib/core/httpClient.d.ts +149 -0
  344. package/types/lib/core/httpClient.d.ts.map +1 -0
  345. package/types/lib/core/logger.d.ts +28 -0
  346. package/types/lib/core/logger.d.ts.map +1 -0
  347. package/types/lib/core/parallel.d.ts +95 -0
  348. package/types/lib/core/parallel.d.ts.map +1 -0
  349. package/types/lib/core/paths.d.ts +36 -0
  350. package/types/lib/core/paths.d.ts.map +1 -0
  351. package/types/lib/core/projectConfig.d.ts +23 -0
  352. package/types/lib/core/projectConfig.d.ts.map +1 -0
  353. package/types/lib/core/propertySanitizer.d.ts +23 -0
  354. package/types/lib/core/propertySanitizer.d.ts.map +1 -0
  355. package/types/lib/core/spdx.d.ts +5 -0
  356. package/types/lib/core/spdx.d.ts.map +1 -0
  357. package/types/lib/core/state.d.ts +20 -0
  358. package/types/lib/core/state.d.ts.map +1 -0
  359. package/types/lib/core/text.d.ts +78 -0
  360. package/types/lib/core/text.d.ts.map +1 -0
  361. package/types/lib/core/ui.d.ts +87 -0
  362. package/types/lib/core/ui.d.ts.map +1 -0
  363. package/types/lib/core/urls.d.ts +43 -0
  364. package/types/lib/core/urls.d.ts.map +1 -0
  365. package/types/lib/ecosystems/asarutils.d.ts +71 -0
  366. package/types/lib/ecosystems/asarutils.d.ts.map +1 -0
  367. package/types/lib/ecosystems/bunutils.d.ts +38 -0
  368. package/types/lib/ecosystems/bunutils.d.ts.map +1 -0
  369. package/types/lib/ecosystems/caxa.d.ts +8 -0
  370. package/types/lib/ecosystems/caxa.d.ts.map +1 -0
  371. package/types/lib/ecosystems/chromextutils.d.ts +97 -0
  372. package/types/lib/ecosystems/chromextutils.d.ts.map +1 -0
  373. package/types/lib/ecosystems/cmakeResolver.d.ts +176 -0
  374. package/types/lib/ecosystems/cmakeResolver.d.ts.map +1 -0
  375. package/types/lib/ecosystems/cppEvidence.d.ts +35 -0
  376. package/types/lib/ecosystems/cppEvidence.d.ts.map +1 -0
  377. package/types/lib/ecosystems/denoutils.d.ts +76 -0
  378. package/types/lib/ecosystems/denoutils.d.ts.map +1 -0
  379. package/types/lib/ecosystems/dotnetutils.d.ts +45 -0
  380. package/types/lib/ecosystems/dotnetutils.d.ts.map +1 -0
  381. package/types/lib/ecosystems/ecosystems.d.ts +279 -0
  382. package/types/lib/ecosystems/ecosystems.d.ts.map +1 -0
  383. package/types/lib/ecosystems/golem.d.ts +60 -0
  384. package/types/lib/ecosystems/golem.d.ts.map +1 -0
  385. package/types/lib/ecosystems/gradleutils.d.ts +139 -0
  386. package/types/lib/ecosystems/gradleutils.d.ts.map +1 -0
  387. package/types/lib/ecosystems/jsEvidence.d.ts +17 -0
  388. package/types/lib/ecosystems/jsEvidence.d.ts.map +1 -0
  389. package/types/lib/ecosystems/npmutils.d.ts +183 -0
  390. package/types/lib/ecosystems/npmutils.d.ts.map +1 -0
  391. package/types/lib/ecosystems/parsers-bazel.d.ts +36 -0
  392. package/types/lib/ecosystems/parsers-bazel.d.ts.map +1 -0
  393. package/types/lib/ecosystems/parsers-dotnet.d.ts +116 -0
  394. package/types/lib/ecosystems/parsers-dotnet.d.ts.map +1 -0
  395. package/types/lib/ecosystems/parsers-gleam.d.ts +33 -0
  396. package/types/lib/ecosystems/parsers-gleam.d.ts.map +1 -0
  397. package/types/lib/ecosystems/parsers-go.d.ts +92 -0
  398. package/types/lib/ecosystems/parsers-go.d.ts.map +1 -0
  399. package/types/lib/ecosystems/parsers-js.d.ts +242 -0
  400. package/types/lib/ecosystems/parsers-js.d.ts.map +1 -0
  401. package/types/lib/ecosystems/parsers-jvm.d.ts +100 -0
  402. package/types/lib/ecosystems/parsers-jvm.d.ts.map +1 -0
  403. package/types/lib/ecosystems/parsers-misc.d.ts +450 -0
  404. package/types/lib/ecosystems/parsers-misc.d.ts.map +1 -0
  405. package/types/lib/ecosystems/parsers-python.d.ts +145 -0
  406. package/types/lib/ecosystems/parsers-python.d.ts.map +1 -0
  407. package/types/lib/ecosystems/parsers-rust.d.ts +56 -0
  408. package/types/lib/ecosystems/parsers-rust.d.ts.map +1 -0
  409. package/types/lib/ecosystems/parsers-zig.d.ts +83 -0
  410. package/types/lib/ecosystems/parsers-zig.d.ts.map +1 -0
  411. package/types/lib/ecosystems/pep770.d.ts +38 -0
  412. package/types/lib/ecosystems/pep770.d.ts.map +1 -0
  413. package/types/lib/ecosystems/pylockutils.d.ts +68 -0
  414. package/types/lib/ecosystems/pylockutils.d.ts.map +1 -0
  415. package/types/lib/ecosystems/pythonutils.d.ts +70 -0
  416. package/types/lib/ecosystems/pythonutils.d.ts.map +1 -0
  417. package/types/lib/ecosystems/registryProvenance.d.ts +26 -0
  418. package/types/lib/ecosystems/registryProvenance.d.ts.map +1 -0
  419. package/types/lib/ecosystems/remote/huggingface.d.ts +31 -0
  420. package/types/lib/ecosystems/remote/huggingface.d.ts.map +1 -0
  421. package/types/lib/ecosystems/rubyutils.d.ts +182 -0
  422. package/types/lib/ecosystems/rubyutils.d.ts.map +1 -0
  423. package/types/lib/ecosystems/rusi.d.ts +40 -0
  424. package/types/lib/ecosystems/rusi.d.ts.map +1 -0
  425. package/types/lib/ecosystems/sbtutils.d.ts +179 -0
  426. package/types/lib/ecosystems/sbtutils.d.ts.map +1 -0
  427. package/types/lib/ecosystems/tea.d.ts +180 -0
  428. package/types/lib/ecosystems/tea.d.ts.map +1 -0
  429. package/types/lib/ecosystems/utils.d.ts +41 -0
  430. package/types/lib/ecosystems/utils.d.ts.map +1 -0
  431. package/types/lib/ecosystems/zigResolver.d.ts +70 -0
  432. package/types/lib/ecosystems/zigResolver.d.ts.map +1 -0
  433. package/types/lib/evinser/db.d.ts +17 -0
  434. package/types/lib/evinser/db.d.ts.map +1 -0
  435. package/types/lib/evinser/evinser.d.ts +354 -0
  436. package/types/lib/evinser/evinser.d.ts.map +1 -0
  437. package/types/lib/evinser/scalasem.d.ts +15 -0
  438. package/types/lib/evinser/scalasem.d.ts.map +1 -0
  439. package/types/lib/evinser/swiftsem.d.ts +103 -0
  440. package/types/lib/evinser/swiftsem.d.ts.map +1 -0
  441. package/types/lib/helpers/annotationFormatter.d.ts +23 -0
  442. package/types/lib/helpers/annotationFormatter.d.ts.map +1 -0
  443. package/types/lib/helpers/bomSigner.d.ts +28 -0
  444. package/types/lib/helpers/bomSigner.d.ts.map +1 -0
  445. package/types/lib/helpers/exportUtils.d.ts +52 -0
  446. package/types/lib/helpers/exportUtils.d.ts.map +1 -0
  447. package/types/lib/helpers/remote/dependency-track.d.ts +23 -0
  448. package/types/lib/helpers/remote/dependency-track.d.ts.map +1 -0
  449. package/types/lib/helpers/versutils.d.ts +8 -0
  450. package/types/lib/helpers/versutils.d.ts.map +1 -0
  451. package/types/lib/helpers/vsixutils.d.ts +130 -0
  452. package/types/lib/helpers/vsixutils.d.ts.map +1 -0
  453. package/types/lib/inventory/agentFormulationParser.d.ts +21 -0
  454. package/types/lib/inventory/agentFormulationParser.d.ts.map +1 -0
  455. package/types/lib/inventory/aiCollector.d.ts +61 -0
  456. package/types/lib/inventory/aiCollector.d.ts.map +1 -0
  457. package/types/lib/inventory/aiInventory.d.ts +103 -0
  458. package/types/lib/inventory/aiInventory.d.ts.map +1 -0
  459. package/types/lib/inventory/aiModelVariants.d.ts +31 -0
  460. package/types/lib/inventory/aiModelVariants.d.ts.map +1 -0
  461. package/types/lib/inventory/aiOversightCollector.d.ts +28 -0
  462. package/types/lib/inventory/aiOversightCollector.d.ts.map +1 -0
  463. package/types/lib/inventory/aiProvenanceCollector.d.ts +13 -0
  464. package/types/lib/inventory/aiProvenanceCollector.d.ts.map +1 -0
  465. package/types/lib/inventory/analyzer.d.ts +157 -0
  466. package/types/lib/inventory/analyzer.d.ts.map +1 -0
  467. package/types/lib/inventory/analyzerScope.d.ts +106 -0
  468. package/types/lib/inventory/analyzerScope.d.ts.map +1 -0
  469. package/types/lib/inventory/astWorker.d.ts +9 -0
  470. package/types/lib/inventory/astWorker.d.ts.map +1 -0
  471. package/types/lib/inventory/atomUtils.d.ts +159 -0
  472. package/types/lib/inventory/atomUtils.d.ts.map +1 -0
  473. package/types/lib/inventory/auditCategories.d.ts +80 -0
  474. package/types/lib/inventory/auditCategories.d.ts.map +1 -0
  475. package/types/lib/inventory/bomUtils.d.ts +145 -0
  476. package/types/lib/inventory/bomUtils.d.ts.map +1 -0
  477. package/types/lib/inventory/cacheCommands.d.ts +28 -0
  478. package/types/lib/inventory/cacheCommands.d.ts.map +1 -0
  479. package/types/lib/inventory/cacheDir.d.ts +55 -0
  480. package/types/lib/inventory/cacheDir.d.ts.map +1 -0
  481. package/types/lib/inventory/cbomutils.d.ts +37 -0
  482. package/types/lib/inventory/cbomutils.d.ts.map +1 -0
  483. package/types/lib/inventory/cdxrs.d.ts +90 -0
  484. package/types/lib/inventory/cdxrs.d.ts.map +1 -0
  485. package/types/lib/inventory/ciParsers/azurePipelines.d.ts +27 -0
  486. package/types/lib/inventory/ciParsers/azurePipelines.d.ts.map +1 -0
  487. package/types/lib/inventory/ciParsers/circleCi.d.ts +27 -0
  488. package/types/lib/inventory/ciParsers/circleCi.d.ts.map +1 -0
  489. package/types/lib/inventory/ciParsers/common.d.ts +11 -0
  490. package/types/lib/inventory/ciParsers/common.d.ts.map +1 -0
  491. package/types/lib/inventory/ciParsers/githubActions.d.ts +38 -0
  492. package/types/lib/inventory/ciParsers/githubActions.d.ts.map +1 -0
  493. package/types/lib/inventory/ciParsers/gitlabCi.d.ts +26 -0
  494. package/types/lib/inventory/ciParsers/gitlabCi.d.ts.map +1 -0
  495. package/types/lib/inventory/ciParsers/jenkins.d.ts +26 -0
  496. package/types/lib/inventory/ciParsers/jenkins.d.ts.map +1 -0
  497. package/types/lib/inventory/citations.d.ts +90 -0
  498. package/types/lib/inventory/citations.d.ts.map +1 -0
  499. package/types/lib/inventory/communityAiConfigParser.d.ts +14 -0
  500. package/types/lib/inventory/communityAiConfigParser.d.ts.map +1 -0
  501. package/types/lib/inventory/containerRisk.d.ts +20 -0
  502. package/types/lib/inventory/containerRisk.d.ts.map +1 -0
  503. package/types/lib/inventory/cryptoAlgorithmFamily.d.ts +37 -0
  504. package/types/lib/inventory/cryptoAlgorithmFamily.d.ts.map +1 -0
  505. package/types/lib/inventory/deps.d.ts +140 -0
  506. package/types/lib/inventory/deps.d.ts.map +1 -0
  507. package/types/lib/inventory/depsUtils.d.ts +74 -0
  508. package/types/lib/inventory/depsUtils.d.ts.map +1 -0
  509. package/types/lib/inventory/display.d.ts +227 -0
  510. package/types/lib/inventory/display.d.ts.map +1 -0
  511. package/types/lib/inventory/dosai.d.ts +130 -0
  512. package/types/lib/inventory/dosai.d.ts.map +1 -0
  513. package/types/lib/inventory/dosaiParsers.d.ts +59 -0
  514. package/types/lib/inventory/dosaiParsers.d.ts.map +1 -0
  515. package/types/lib/inventory/dynamic.d.ts +25 -0
  516. package/types/lib/inventory/dynamic.d.ts.map +1 -0
  517. package/types/lib/inventory/envcontext.d.ts +377 -0
  518. package/types/lib/inventory/envcontext.d.ts.map +1 -0
  519. package/types/lib/inventory/evidenceUtils.d.ts +74 -0
  520. package/types/lib/inventory/evidenceUtils.d.ts.map +1 -0
  521. package/types/lib/inventory/fetchBatch.d.ts +127 -0
  522. package/types/lib/inventory/fetchBatch.d.ts.map +1 -0
  523. package/types/lib/inventory/fetchRate.d.ts +118 -0
  524. package/types/lib/inventory/fetchRate.d.ts.map +1 -0
  525. package/types/lib/inventory/forgeEnricher.d.ts +31 -0
  526. package/types/lib/inventory/forgeEnricher.d.ts.map +1 -0
  527. package/types/lib/inventory/formulationParsers.d.ts +50 -0
  528. package/types/lib/inventory/formulationParsers.d.ts.map +1 -0
  529. package/types/lib/inventory/gtfobins.d.ts +27 -0
  530. package/types/lib/inventory/gtfobins.d.ts.map +1 -0
  531. package/types/lib/inventory/hbom.d.ts +58 -0
  532. package/types/lib/inventory/hbom.d.ts.map +1 -0
  533. package/types/lib/inventory/hbomAnalysis.d.ts +56 -0
  534. package/types/lib/inventory/hbomAnalysis.d.ts.map +1 -0
  535. package/types/lib/inventory/hbomLoader.d.ts +7 -0
  536. package/types/lib/inventory/hbomLoader.d.ts.map +1 -0
  537. package/types/lib/inventory/hostTopology.d.ts +47 -0
  538. package/types/lib/inventory/hostTopology.d.ts.map +1 -0
  539. package/types/lib/inventory/inventoryStats.d.ts +42 -0
  540. package/types/lib/inventory/inventoryStats.d.ts.map +1 -0
  541. package/types/lib/inventory/jsonLike.d.ts +23 -0
  542. package/types/lib/inventory/jsonLike.d.ts.map +1 -0
  543. package/types/lib/inventory/licenseEnhancer.d.ts +70 -0
  544. package/types/lib/inventory/licenseEnhancer.d.ts.map +1 -0
  545. package/types/lib/inventory/lolbas.d.ts +16 -0
  546. package/types/lib/inventory/lolbas.d.ts.map +1 -0
  547. package/types/lib/inventory/mcp.d.ts +29 -0
  548. package/types/lib/inventory/mcp.d.ts.map +1 -0
  549. package/types/lib/inventory/mcpConfigParser.d.ts +20 -0
  550. package/types/lib/inventory/mcpConfigParser.d.ts.map +1 -0
  551. package/types/lib/inventory/mcpDiscovery.d.ts +33 -0
  552. package/types/lib/inventory/mcpDiscovery.d.ts.map +1 -0
  553. package/types/lib/inventory/mcpPinning.d.ts +11 -0
  554. package/types/lib/inventory/mcpPinning.d.ts.map +1 -0
  555. package/types/lib/inventory/osPackageResolver.d.ts +49 -0
  556. package/types/lib/inventory/osPackageResolver.d.ts.map +1 -0
  557. package/types/lib/inventory/osinfo.d.ts +120 -0
  558. package/types/lib/inventory/osinfo.d.ts.map +1 -0
  559. package/types/lib/inventory/osqueryTransform.d.ts +84 -0
  560. package/types/lib/inventory/osqueryTransform.d.ts.map +1 -0
  561. package/types/lib/inventory/plugins.d.ts +58 -0
  562. package/types/lib/inventory/plugins.d.ts.map +1 -0
  563. package/types/lib/inventory/protobom.d.ts +71 -0
  564. package/types/lib/inventory/protobom.d.ts.map +1 -0
  565. package/types/lib/inventory/protobomLoader.d.ts +17 -0
  566. package/types/lib/inventory/protobomLoader.d.ts.map +1 -0
  567. package/types/lib/inventory/provenanceUtils.d.ts +98 -0
  568. package/types/lib/inventory/provenanceUtils.d.ts.map +1 -0
  569. package/types/lib/inventory/purl.d.ts +313 -0
  570. package/types/lib/inventory/purl.d.ts.map +1 -0
  571. package/types/lib/inventory/rustFormulationParser.d.ts +17 -0
  572. package/types/lib/inventory/rustFormulationParser.d.ts.map +1 -0
  573. package/types/lib/inventory/sbomDocument.d.ts +59 -0
  574. package/types/lib/inventory/sbomDocument.d.ts.map +1 -0
  575. package/types/lib/inventory/source.d.ts +163 -0
  576. package/types/lib/inventory/source.d.ts.map +1 -0
  577. package/types/lib/inventory/spdx.d.ts +66 -0
  578. package/types/lib/inventory/spdx.d.ts.map +1 -0
  579. package/types/lib/inventory/spdxExpression.d.ts +58 -0
  580. package/types/lib/inventory/spdxExpression.d.ts.map +1 -0
  581. package/types/lib/inventory/spdxUtils.d.ts +12 -0
  582. package/types/lib/inventory/spdxUtils.d.ts.map +1 -0
  583. package/types/lib/inventory/table.d.ts +19 -0
  584. package/types/lib/inventory/table.d.ts.map +1 -0
  585. package/types/lib/inventory/traceRunner.d.ts +80 -0
  586. package/types/lib/inventory/traceRunner.d.ts.map +1 -0
  587. package/types/lib/inventory/unicodeScan.d.ts +46 -0
  588. package/types/lib/inventory/unicodeScan.d.ts.map +1 -0
  589. package/types/lib/managers/binary.d.ts +76 -0
  590. package/types/lib/managers/binary.d.ts.map +1 -0
  591. package/types/lib/managers/containerutils.d.ts +30 -0
  592. package/types/lib/managers/containerutils.d.ts.map +1 -0
  593. package/types/lib/managers/docker.d.ts +157 -0
  594. package/types/lib/managers/docker.d.ts.map +1 -0
  595. package/types/lib/managers/dockerConnection.d.ts +42 -0
  596. package/types/lib/managers/dockerConnection.d.ts.map +1 -0
  597. package/types/lib/managers/oci.d.ts +21 -0
  598. package/types/lib/managers/oci.d.ts.map +1 -0
  599. package/types/lib/managers/piptree.d.ts +13 -0
  600. package/types/lib/managers/piptree.d.ts.map +1 -0
  601. package/types/lib/parsers/cmakeCache.d.ts +70 -0
  602. package/types/lib/parsers/cmakeCache.d.ts.map +1 -0
  603. package/types/lib/parsers/gguf.d.ts +39 -0
  604. package/types/lib/parsers/gguf.d.ts.map +1 -0
  605. package/types/lib/parsers/gitAiNotes.d.ts +15 -0
  606. package/types/lib/parsers/gitAiNotes.d.ts.map +1 -0
  607. package/types/lib/parsers/gitmodules.d.ts +88 -0
  608. package/types/lib/parsers/gitmodules.d.ts.map +1 -0
  609. package/types/lib/parsers/htmlExtract.d.ts +34 -0
  610. package/types/lib/parsers/htmlExtract.d.ts.map +1 -0
  611. package/types/lib/parsers/huggingfaceManifest.d.ts +153 -0
  612. package/types/lib/parsers/huggingfaceManifest.d.ts.map +1 -0
  613. package/types/lib/parsers/huggingfaceUtils.d.ts +155 -0
  614. package/types/lib/parsers/huggingfaceUtils.d.ts.map +1 -0
  615. package/types/lib/parsers/iri.d.ts +68 -0
  616. package/types/lib/parsers/iri.d.ts.map +1 -0
  617. package/types/lib/parsers/npmrc.d.ts +33 -0
  618. package/types/lib/parsers/npmrc.d.ts.map +1 -0
  619. package/types/lib/parsers/ollama.d.ts +22 -0
  620. package/types/lib/parsers/ollama.d.ts.map +1 -0
  621. package/types/lib/parsers/xml.d.ts +47 -0
  622. package/types/lib/parsers/xml.d.ts.map +1 -0
  623. package/types/lib/server/server.d.ts +51 -0
  624. package/types/lib/server/server.d.ts.map +1 -0
  625. package/types/lib/stages/postgen/annotator.d.ts +36 -0
  626. package/types/lib/stages/postgen/annotator.d.ts.map +1 -0
  627. package/types/lib/stages/postgen/auditBom.d.ts +92 -0
  628. package/types/lib/stages/postgen/auditBom.d.ts.map +1 -0
  629. package/types/lib/stages/postgen/postgen.d.ts +59 -0
  630. package/types/lib/stages/postgen/postgen.d.ts.map +1 -0
  631. package/types/lib/stages/postgen/ruleEngine.d.ts +18 -0
  632. package/types/lib/stages/postgen/ruleEngine.d.ts.map +1 -0
  633. package/types/lib/stages/postgen/sortBom.d.ts +34 -0
  634. package/types/lib/stages/postgen/sortBom.d.ts.map +1 -0
  635. package/types/lib/stages/postgen/spdxConverter.d.ts +11 -0
  636. package/types/lib/stages/postgen/spdxConverter.d.ts.map +1 -0
  637. package/types/lib/stages/postgen/specVersionCompat.d.ts +71 -0
  638. package/types/lib/stages/postgen/specVersionCompat.d.ts.map +1 -0
  639. package/types/lib/stages/pregen/envAudit.d.ts +14 -0
  640. package/types/lib/stages/pregen/envAudit.d.ts.map +1 -0
  641. package/types/lib/stages/pregen/pregen.d.ts +59 -0
  642. package/types/lib/stages/pregen/pregen.d.ts.map +1 -0
  643. package/types/lib/third-party/arborist/lib/arborist/index.d.ts +47 -0
  644. package/types/lib/third-party/arborist/lib/arborist/index.d.ts.map +1 -0
  645. package/types/lib/third-party/arborist/lib/arborist/load-actual.d.ts +4 -0
  646. package/types/lib/third-party/arborist/lib/arborist/load-actual.d.ts.map +1 -0
  647. package/types/lib/third-party/arborist/lib/arborist/load-virtual.d.ts +4 -0
  648. package/types/lib/third-party/arborist/lib/arborist/load-virtual.d.ts.map +1 -0
  649. package/types/lib/third-party/arborist/lib/bin-links.d.ts +18 -0
  650. package/types/lib/third-party/arborist/lib/bin-links.d.ts.map +1 -0
  651. package/types/lib/third-party/arborist/lib/calc-dep-flags.d.ts +3 -0
  652. package/types/lib/third-party/arborist/lib/calc-dep-flags.d.ts.map +1 -0
  653. package/types/lib/third-party/arborist/lib/case-insensitive-map.d.ts +9 -0
  654. package/types/lib/third-party/arborist/lib/case-insensitive-map.d.ts.map +1 -0
  655. package/types/lib/third-party/arborist/lib/consistent-resolve.d.ts +3 -0
  656. package/types/lib/third-party/arborist/lib/consistent-resolve.d.ts.map +1 -0
  657. package/types/lib/third-party/arborist/lib/debug.d.ts +3 -0
  658. package/types/lib/third-party/arborist/lib/debug.d.ts.map +1 -0
  659. package/types/lib/third-party/arborist/lib/dep-valid.d.ts +3 -0
  660. package/types/lib/third-party/arborist/lib/dep-valid.d.ts.map +1 -0
  661. package/types/lib/third-party/arborist/lib/edge.d.ts +46 -0
  662. package/types/lib/third-party/arborist/lib/edge.d.ts.map +1 -0
  663. package/types/lib/third-party/arborist/lib/from-path.d.ts +3 -0
  664. package/types/lib/third-party/arborist/lib/from-path.d.ts.map +1 -0
  665. package/types/lib/third-party/arborist/lib/gather-dep-set.d.ts +3 -0
  666. package/types/lib/third-party/arborist/lib/gather-dep-set.d.ts.map +1 -0
  667. package/types/lib/third-party/arborist/lib/index.d.ts +3 -0
  668. package/types/lib/third-party/arborist/lib/index.d.ts.map +1 -0
  669. package/types/lib/third-party/arborist/lib/inventory.d.ts +14 -0
  670. package/types/lib/third-party/arborist/lib/inventory.d.ts.map +1 -0
  671. package/types/lib/third-party/arborist/lib/link.d.ts +18 -0
  672. package/types/lib/third-party/arborist/lib/link.d.ts.map +1 -0
  673. package/types/lib/third-party/arborist/lib/node.d.ts +112 -0
  674. package/types/lib/third-party/arborist/lib/node.d.ts.map +1 -0
  675. package/types/lib/third-party/arborist/lib/npm-extension.d.ts +18 -0
  676. package/types/lib/third-party/arborist/lib/npm-extension.d.ts.map +1 -0
  677. package/types/lib/third-party/arborist/lib/override-resolves.d.ts +3 -0
  678. package/types/lib/third-party/arborist/lib/override-resolves.d.ts.map +1 -0
  679. package/types/lib/third-party/arborist/lib/override-set.d.ts +27 -0
  680. package/types/lib/third-party/arborist/lib/override-set.d.ts.map +1 -0
  681. package/types/lib/third-party/arborist/lib/package-extensions.d.ts +36 -0
  682. package/types/lib/third-party/arborist/lib/package-extensions.d.ts.map +1 -0
  683. package/types/lib/third-party/arborist/lib/printable.d.ts +3 -0
  684. package/types/lib/third-party/arborist/lib/printable.d.ts.map +1 -0
  685. package/types/lib/third-party/arborist/lib/proc-log.d.ts +20 -0
  686. package/types/lib/third-party/arborist/lib/proc-log.d.ts.map +1 -0
  687. package/types/lib/third-party/arborist/lib/realpath.d.ts +3 -0
  688. package/types/lib/third-party/arborist/lib/realpath.d.ts.map +1 -0
  689. package/types/lib/third-party/arborist/lib/relpath.d.ts +3 -0
  690. package/types/lib/third-party/arborist/lib/relpath.d.ts.map +1 -0
  691. package/types/lib/third-party/arborist/lib/shrinkwrap.d.ts +54 -0
  692. package/types/lib/third-party/arborist/lib/shrinkwrap.d.ts.map +1 -0
  693. package/types/lib/third-party/arborist/lib/spec-from-lock.d.ts +3 -0
  694. package/types/lib/third-party/arborist/lib/spec-from-lock.d.ts.map +1 -0
  695. package/types/lib/third-party/arborist/lib/tree-check.d.ts +3 -0
  696. package/types/lib/third-party/arborist/lib/tree-check.d.ts.map +1 -0
  697. package/types/lib/third-party/arborist/lib/validate-npm-package-name.d.ts +13 -0
  698. package/types/lib/third-party/arborist/lib/validate-npm-package-name.d.ts.map +1 -0
  699. package/types/lib/third-party/arborist/lib/version-from-tgz.d.ts +6 -0
  700. package/types/lib/third-party/arborist/lib/version-from-tgz.d.ts.map +1 -0
  701. package/types/lib/third-party/arborist/lib/yarn-lock.d.ts +35 -0
  702. package/types/lib/third-party/arborist/lib/yarn-lock.d.ts.map +1 -0
  703. package/types/lib/validator/bomValidator.d.ts +40 -0
  704. package/types/lib/validator/bomValidator.d.ts.map +1 -0
  705. package/types/lib/validator/complianceEngine.d.ts +72 -0
  706. package/types/lib/validator/complianceEngine.d.ts.map +1 -0
  707. package/types/lib/validator/complianceRules.d.ts +61 -0
  708. package/types/lib/validator/complianceRules.d.ts.map +1 -0
  709. package/types/lib/validator/index.d.ts +101 -0
  710. package/types/lib/validator/index.d.ts.map +1 -0
  711. package/types/lib/validator/reporters/annotations.d.ts +37 -0
  712. package/types/lib/validator/reporters/annotations.d.ts.map +1 -0
  713. package/types/lib/validator/reporters/console.d.ts +34 -0
  714. package/types/lib/validator/reporters/console.d.ts.map +1 -0
  715. package/types/lib/validator/reporters/index.d.ts +30 -0
  716. package/types/lib/validator/reporters/index.d.ts.map +1 -0
  717. package/types/lib/validator/reporters/json.d.ts +11 -0
  718. package/types/lib/validator/reporters/json.d.ts.map +1 -0
  719. package/types/lib/validator/reporters/sarif.d.ts +22 -0
  720. package/types/lib/validator/reporters/sarif.d.ts.map +1 -0
  721. package/mod.d.ts +0 -7
  722. package/mod.js +0 -22
@@ -0,0 +1,730 @@
1
+ import { Buffer } from "node:buffer";
2
+ import process from "node:process";
3
+ import { brotliDecompressSync, gunzipSync, inflateSync } from "node:zlib";
4
+
5
+ import {
6
+ Agent,
7
+ EnvHttpProxyAgent,
8
+ interceptors,
9
+ request as undiciRequest,
10
+ } from "undici";
11
+
12
+ // Environment variables here are read with raw `process.env` rather than
13
+ // `readEnvironmentVariable`: that helper lives in activity.js, which imports
14
+ // this module, so routing these through it would form an import cycle.
15
+
16
+ /**
17
+ * A tiny, `got`-compatible HTTP client built on top of undici.
18
+ *
19
+ * cdxgen historically relied on the `got` library. `got` keeps a per-request
20
+ * HTTP cache backed by an EventEmitter which, during large `--deep` scans that
21
+ * issue thousands of parallel license/metadata lookups, leaks "error" listeners
22
+ * and floods the console with `MaxListenersExceededWarning` messages. undici
23
+ * uses a pooled dispatcher and does not exhibit this behaviour.
24
+ *
25
+ * This module intentionally implements only the subset of the `got` surface
26
+ * that cdxgen consumes:
27
+ *
28
+ * - Callable form: `client(url, options)` and the verb helpers `client.get`,
29
+ * `client.post`, `client.put` and `client.head`.
30
+ * - `client.extend(defaults)` to derive a new client with merged defaults.
31
+ * - Request options: `method`, `headers`, `body`, `json`, `responseType`
32
+ * (`"json"` | `"buffer"` | `"text"`), `throwHttpErrors`, `followRedirect`,
33
+ * `timeout` (number of milliseconds or a `got`-style phase object), `retry`
34
+ * (accepted for API compatibility; no automatic retries are performed),
35
+ * `https.rejectUnauthorized` and `context`.
36
+ * - `beforeRequest`, `afterResponse` and `beforeError` hooks with the same
37
+ * calling conventions cdxgen uses today. These hooks continue to power
38
+ * cdxgen's dry-run enforcement, host allow-listing, network-activity
39
+ * recording and HTTP trace logging.
40
+ * - Automatic response decompression (`gzip`, `deflate`, `br`) driven by the
41
+ * `Content-Encoding` header, matching `got`'s transparent decoding.
42
+ * - Proxy support via the standard `HTTP_PROXY`/`HTTPS_PROXY`/`NO_PROXY`
43
+ * environment variables (through undici's `EnvHttpProxyAgent`).
44
+ * - An in-memory GET response cache (enabled by default, disabled by setting
45
+ * the `CDXGEN_NO_CACHE` environment variable) that replaces the got + Keyv
46
+ * cache cdxgen previously relied on.
47
+ * - Response objects exposing `statusCode`, `headers`, `body`, `rawBody`,
48
+ * `url` and `request.options`.
49
+ * - A lazily-resolved `.json()` method on the returned promise, mirroring
50
+ * `got`'s `client(url).json()` usage.
51
+ *
52
+ * @module httpClient
53
+ */
54
+
55
+ /**
56
+ * Error thrown when the server responds with a non 2xx/3xx status code and
57
+ * `throwHttpErrors` has not been disabled. Shaped like `got`'s `HTTPError` so
58
+ * that existing `error.response.statusCode` and `error.options.context` checks
59
+ * keep working.
60
+ */
61
+ export class HTTPError extends Error {
62
+ /**
63
+ * @param {Object} response Response object produced by this client.
64
+ * @param {Object} options Merged request options for the failed request.
65
+ */
66
+ constructor(response, options) {
67
+ super(
68
+ `Response code ${response.statusCode} (${response.statusMessage || "Request failed"})`,
69
+ );
70
+ this.name = "HTTPError";
71
+ this.response = response;
72
+ this.options = options;
73
+ this.code = "ERR_NON_2XX_3XX_RESPONSE";
74
+ }
75
+ }
76
+
77
+ /**
78
+ * Error thrown for transport-level failures (DNS, connection reset, timeouts).
79
+ * Carries the merged request `options` so `beforeError` hooks can inspect the
80
+ * request context.
81
+ */
82
+ export class RequestError extends Error {
83
+ /**
84
+ * @param {Error} cause Underlying error thrown by undici.
85
+ * @param {Object} options Merged request options for the failed request.
86
+ */
87
+ constructor(cause, options) {
88
+ super(cause.message);
89
+ this.name = "RequestError";
90
+ this.options = options;
91
+ this.code = cause.code;
92
+ this.cause = cause;
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Merge two option objects one level deep. `headers`, `hooks` and `context`
98
+ * are merged recursively so per-call overrides do not discard the client
99
+ * defaults.
100
+ *
101
+ * @param {Object} base Base (default) options.
102
+ * @param {Object} override Per-call options.
103
+ * @returns {Object} Merged options object.
104
+ */
105
+ function mergeOptions(base = {}, override = {}) {
106
+ const merged = { ...base, ...override };
107
+ merged.headers = mergeHeaders(base.headers, override.headers);
108
+ merged.context = { ...(base.context || {}), ...(override.context || {}) };
109
+ merged.hooks = mergeHooks(base.hooks, override.hooks);
110
+ return merged;
111
+ }
112
+
113
+ /**
114
+ * Merge two header objects, skipping `undefined` values so callers can pass
115
+ * `headers: undefined` without clobbering the client defaults.
116
+ *
117
+ * @param {Object} [base] Default headers.
118
+ * @param {Object} [override] Per-call headers.
119
+ * @returns {Object} Merged headers.
120
+ */
121
+ function mergeHeaders(base = {}, override = {}) {
122
+ const headers = { ...(base || {}) };
123
+ for (const [key, value] of Object.entries(override || {})) {
124
+ if (value !== undefined) {
125
+ headers[key] = value;
126
+ }
127
+ }
128
+ return headers;
129
+ }
130
+
131
+ /**
132
+ * Concatenate hook arrays from the defaults and per-call options so both run.
133
+ *
134
+ * @param {Object} [base] Default hooks.
135
+ * @param {Object} [override] Per-call hooks.
136
+ * @returns {Object} Merged hooks with `beforeRequest`, `afterResponse` and
137
+ * `beforeError` arrays.
138
+ */
139
+ function mergeHooks(base = {}, override = {}) {
140
+ const hookNames = ["beforeRequest", "afterResponse", "beforeError"];
141
+ const merged = {};
142
+ for (const name of hookNames) {
143
+ merged[name] = [...(base?.[name] || []), ...(override?.[name] || [])];
144
+ }
145
+ return merged;
146
+ }
147
+
148
+ // Default per-request timeout (ms). undici (unlike got) applies no request
149
+ // timeout by default, so an unresponsive host would hang a scan indefinitely.
150
+ // 15s is generous for metadata/registry lookups; raise it for slow networks or
151
+ // large downloads via CDXGEN_HTTP_TIMEOUT_MS. Capped at 1h so a typo cannot
152
+ // effectively disable the timeout.
153
+ const DEFAULT_HTTP_TIMEOUT_MS = 15000;
154
+ const MAX_HTTP_TIMEOUT_MS = 3600000;
155
+
156
+ /**
157
+ * Resolve the default HTTP request timeout, honoring the validated
158
+ * CDXGEN_HTTP_TIMEOUT_MS environment variable when set to a positive integer.
159
+ *
160
+ * @returns {number} Timeout in milliseconds
161
+ */
162
+ export function getDefaultHttpTimeoutMs() {
163
+ const raw = process.env.CDXGEN_HTTP_TIMEOUT_MS;
164
+ if (raw === undefined || raw === "") {
165
+ return DEFAULT_HTTP_TIMEOUT_MS;
166
+ }
167
+ const parsed = Number.parseInt(raw, 10);
168
+ if (!Number.isInteger(parsed) || parsed <= 0) {
169
+ return DEFAULT_HTTP_TIMEOUT_MS;
170
+ }
171
+ return Math.min(parsed, MAX_HTTP_TIMEOUT_MS);
172
+ }
173
+
174
+ /**
175
+ * Translate a `got`-style timeout option into a single total-request timeout in
176
+ * milliseconds suitable for `AbortSignal.timeout`. A plain number is used
177
+ * verbatim. A phase object (e.g. `{ connect, send, response }`, or `{ request }`)
178
+ * is reduced to the sum of its numeric phases, which provides a sensible upper
179
+ * bound for the whole request.
180
+ *
181
+ * @param {number|Object} [timeout] `got`-style timeout option.
182
+ * @returns {number|undefined} Total timeout in milliseconds, or `undefined`.
183
+ */
184
+ export function resolveTimeout(timeout) {
185
+ if (timeout === undefined || timeout === null) {
186
+ return undefined;
187
+ }
188
+ if (typeof timeout === "number") {
189
+ return timeout;
190
+ }
191
+ if (typeof timeout === "object") {
192
+ if (typeof timeout.request === "number") {
193
+ return timeout.request;
194
+ }
195
+ const phases = [
196
+ timeout.connect,
197
+ timeout.secureConnect,
198
+ timeout.send,
199
+ timeout.response,
200
+ timeout.socket,
201
+ ].filter((value) => typeof value === "number");
202
+ if (phases.length) {
203
+ return phases.reduce((total, value) => total + value, 0);
204
+ }
205
+ }
206
+ return undefined;
207
+ }
208
+
209
+ /**
210
+ * Decompress a response body buffer according to its `Content-Encoding`. undici
211
+ * performs no automatic decompression, so we replicate the behaviour `got` gave
212
+ * us for `gzip`, `deflate` and `br` encoded responses. Multiple, comma-separated
213
+ * encodings are applied in reverse order. Unknown encodings and decompression
214
+ * failures fall back to returning the buffer untouched.
215
+ *
216
+ * @param {Buffer} rawBody Raw response bytes.
217
+ * @param {string} [contentEncoding] Value of the Content-Encoding header.
218
+ * @returns {Buffer} Decompressed (or original) buffer.
219
+ */
220
+ function decompressBody(rawBody, contentEncoding) {
221
+ if (!contentEncoding || rawBody.length === 0) {
222
+ return rawBody;
223
+ }
224
+ const encodings = contentEncoding
225
+ .split(",")
226
+ .map((encoding) => encoding.trim().toLowerCase())
227
+ .filter(Boolean);
228
+ let buffer = rawBody;
229
+ for (const encoding of encodings.reverse()) {
230
+ try {
231
+ if (encoding === "gzip" || encoding === "x-gzip") {
232
+ buffer = gunzipSync(buffer);
233
+ } else if (encoding === "deflate") {
234
+ buffer = inflateSync(buffer);
235
+ } else if (encoding === "br") {
236
+ buffer = brotliDecompressSync(buffer);
237
+ } else if (encoding === "identity") {
238
+ // no-op
239
+ } else {
240
+ // Unknown encoding; leave the buffer as-is.
241
+ return buffer;
242
+ }
243
+ } catch {
244
+ // Decompression failed (e.g. body was not actually encoded); return what
245
+ // we have so callers can attempt to parse it.
246
+ return buffer;
247
+ }
248
+ }
249
+ return buffer;
250
+ }
251
+
252
+ /**
253
+ * Read and decode an undici response body according to the requested
254
+ * `responseType`.
255
+ *
256
+ * @param {Object} undiciResponse Response returned by `undici.request`.
257
+ * @param {string} [responseType] One of `"json"`, `"buffer"` or `"text"`.
258
+ * @returns {Promise<{body: any, rawBody: Buffer}>} Decoded body and raw bytes.
259
+ */
260
+ async function readBody(undiciResponse, responseType) {
261
+ const arrayBuffer = await undiciResponse.body.arrayBuffer();
262
+ let rawBody = Buffer.from(arrayBuffer);
263
+ // undici (unlike got) does not transparently decompress response bodies, so
264
+ // honor the Content-Encoding header ourselves. Some registries (e.g. the
265
+ // nuget registration5-gz-semver2 endpoint) always return gzip-encoded JSON.
266
+ rawBody = decompressBody(
267
+ rawBody,
268
+ undiciResponse.headers?.["content-encoding"],
269
+ );
270
+ let body;
271
+ if (responseType === "buffer") {
272
+ body = rawBody;
273
+ } else if (responseType === "json") {
274
+ const text = rawBody.toString("utf-8");
275
+ body = text.length ? JSON.parse(text) : undefined;
276
+ } else {
277
+ body = rawBody.toString("utf-8");
278
+ }
279
+ return { body, rawBody };
280
+ }
281
+
282
+ /**
283
+ * Convert a body into the `[body, headers]` pair to hand to undici. When the
284
+ * `json` option is present it is serialized and a JSON `content-type` is added
285
+ * unless the caller already set one.
286
+ *
287
+ * @param {Object} options Merged request options.
288
+ * @returns {{body: (string|Buffer|undefined), headers: Object}} Request body
289
+ * and (possibly augmented) headers.
290
+ */
291
+ function resolveRequestBody(options) {
292
+ const headers = { ...(options.headers || {}) };
293
+ if (options.json !== undefined) {
294
+ const hasContentType = Object.keys(headers).some(
295
+ (key) => key.toLowerCase() === "content-type",
296
+ );
297
+ if (!hasContentType) {
298
+ headers["content-type"] = "application/json";
299
+ }
300
+ return { body: JSON.stringify(options.json), headers };
301
+ }
302
+ return { body: options.body, headers };
303
+ }
304
+
305
+ // In-memory cache of successful GET responses, mirroring the HTTP cache cdxgen
306
+ // historically kept via got + Keyv. Repeated metadata/license lookups during a
307
+ // scan are served from here instead of hitting the network again. Set the
308
+ // CDXGEN_NO_CACHE environment variable to "true" or "1" to disable it.
309
+ const responseCache = new Map();
310
+
311
+ /**
312
+ * Determine whether the in-memory HTTP response cache is disabled via the
313
+ * CDXGEN_NO_CACHE environment variable. Evaluated per request so tests and
314
+ * callers can toggle it at runtime.
315
+ *
316
+ * @returns {boolean} True when caching should be skipped.
317
+ */
318
+ export function isCacheDisabled() {
319
+ const value = process.env.CDXGEN_NO_CACHE;
320
+ return value === "true" || value === "1";
321
+ }
322
+
323
+ /**
324
+ * Clear the in-memory HTTP response cache. Primarily useful for tests.
325
+ *
326
+ * @returns {void}
327
+ */
328
+ export function clearHttpCache() {
329
+ responseCache.clear();
330
+ }
331
+
332
+ // ---------------------------------------------------------------------------
333
+ // Test cassette interceptor — the single network seam.
334
+ //
335
+ // `createHttpClient()` is the only factory that produces HTTP clients in the
336
+ // entire cdxgen codebase (confirmed by grep). By intercepting inside
337
+ // `doRequest`, every outbound request — whether from `cdxgenAgent` in utils.js,
338
+ // the OCI image manager, or the source analyzer — flows through one choke
339
+ // point. The golden test harness installs an interceptor that either replays
340
+ // a recorded response (cassette) or throws a loud `CassetteMissError` so an
341
+ // unmatched request can never silently reach the live network in CI.
342
+ //
343
+ // In record mode the interceptor returns `null`, letting the real request
344
+ // proceed; a wrapper around the returned promise captures the response for
345
+ // later commit to the cassette file.
346
+ // ---------------------------------------------------------------------------
347
+
348
+ /**
349
+ * Error thrown when a cassette replay session encounters a request with no
350
+ * matching recorded interaction. This is loud-by-design: a silent fall-
351
+ * through to the live network would make offline golden tests meaningless.
352
+ */
353
+ export class CassetteMissError extends Error {
354
+ /**
355
+ * @param {string} method HTTP method.
356
+ * @param {string} url Request URL.
357
+ */
358
+ constructor(method, url) {
359
+ super(
360
+ `Cassette miss: no recorded response for ${method} ${url}. Record with UPDATE_GOLDEN=1 or CDXGEN_CASSETTE_MODE=record.`,
361
+ );
362
+ this.name = "CassetteMissError";
363
+ this.method = method;
364
+ this.url = url;
365
+ }
366
+ }
367
+
368
+ /**
369
+ * Currently-installed interceptor function, or null when no interceptor is
370
+ * active (normal cdxgen operation).
371
+ * @type {((req: Object) => Promise<Object|null>) | null}
372
+ */
373
+ let httpInterceptor = null;
374
+
375
+ /**
376
+ * Install an HTTP interceptor that acts as the single network seam for test
377
+ * cassettes. The interceptor receives a request descriptor and must return
378
+ * either a `got`-like response object (replay hit) or `null` (pass-through /
379
+ * record mode).
380
+ *
381
+ * @param {(req: { method: string, url: URL, headers: Object, body: *, responseType?: string, options: Object }) => Promise<Object|null>} fn
382
+ * Interceptor function.
383
+ * @returns {void}
384
+ */
385
+ export function setHttpInterceptor(fn) {
386
+ httpInterceptor = fn;
387
+ }
388
+
389
+ /**
390
+ * Remove the currently-installed HTTP interceptor, restoring normal network
391
+ * behaviour.
392
+ *
393
+ * @returns {void}
394
+ */
395
+ export function clearHttpInterceptor() {
396
+ httpInterceptor = null;
397
+ }
398
+
399
+ /**
400
+ * Build the cache key for a request. Only the method and normalized URL are
401
+ * used, matching got's default cache key behaviour.
402
+ *
403
+ * @param {string} method Uppercased HTTP method.
404
+ * @param {URL} url Request URL.
405
+ * @returns {string} Cache key.
406
+ */
407
+ function cacheKeyFor(method, url) {
408
+ return `${method}:${url.toString()}`;
409
+ }
410
+
411
+ // The maximum number of redirects to follow when `followRedirect` is enabled.
412
+ const MAX_REDIRECTIONS = 10;
413
+
414
+ // Bun ships its own bundled implementation of the `undici` module which, as of
415
+ // Bun 1.2, does not expose the `Agent.prototype.compose` composition API nor the
416
+ // `interceptors.redirect` interceptor that undici v7 uses for redirect handling
417
+ // (see cdxgen issue #4245). Detect the Bun runtime so we can fall back to plain
418
+ // dispatchers and follow redirects manually instead of crashing at module load.
419
+ const isBun = typeof globalThis.Bun !== "undefined";
420
+
421
+ // Reusable pooled dispatchers. On Node.js, undici composes redirect handling as
422
+ // an interceptor (there is no per-request `maxRedirections` option in undici v7),
423
+ // so we pre-build the small set of dispatcher variants we need instead of
424
+ // allocating a fresh Agent per request (which would defeat connection pooling).
425
+ // On Bun, `compose`/`interceptors.redirect` are unavailable, so the redirect
426
+ // dispatchers are just the plain agents and redirects are handled in
427
+ // `requestWithRedirects` below.
428
+ // Whether standard proxy environment variables are set. When they are, requests
429
+ // must be routed through the proxy. Because this client always passes an
430
+ // explicit per-request `dispatcher`, it overrides Node's global (potentially
431
+ // proxy-aware) dispatcher, so we have to build proxy-aware dispatchers here or
432
+ // HTTP_PROXY/HTTPS_PROXY/NO_PROXY (documented in docs/ENV.md) are silently
433
+ // ignored. `EnvHttpProxyAgent` reads those variables itself, including NO_PROXY
434
+ // bypass handling, per request.
435
+ function hasProxyEnv() {
436
+ return Boolean(
437
+ process.env.HTTP_PROXY ||
438
+ process.env.http_proxy ||
439
+ process.env.HTTPS_PROXY ||
440
+ process.env.https_proxy ||
441
+ process.env.ALL_PROXY ||
442
+ process.env.all_proxy,
443
+ );
444
+ }
445
+
446
+ // Build a base dispatcher, honoring proxy environment variables when present.
447
+ // `EnvHttpProxyAgent` is unavailable in Bun's bundled undici, so fall back to a
448
+ // plain Agent there (matching pre-existing behaviour: no proxy support on Bun).
449
+ function createBaseAgent(agentOptions = {}) {
450
+ if (hasProxyEnv() && typeof EnvHttpProxyAgent === "function" && !isBun) {
451
+ try {
452
+ return new EnvHttpProxyAgent(agentOptions);
453
+ } catch {
454
+ // Fall through to a plain Agent if the proxy agent cannot be constructed.
455
+ }
456
+ }
457
+ return new Agent(agentOptions);
458
+ }
459
+
460
+ const defaultAgent = createBaseAgent();
461
+ const insecureAgent = createBaseAgent({
462
+ connect: { rejectUnauthorized: false },
463
+ });
464
+ const redirectDispatcher = isBun
465
+ ? defaultAgent
466
+ : defaultAgent.compose(
467
+ interceptors.redirect({ maxRedirections: MAX_REDIRECTIONS }),
468
+ );
469
+ const insecureRedirectDispatcher = isBun
470
+ ? insecureAgent
471
+ : insecureAgent.compose(
472
+ interceptors.redirect({ maxRedirections: MAX_REDIRECTIONS }),
473
+ );
474
+
475
+ /**
476
+ * Pick the undici dispatcher matching the request's redirect and TLS
477
+ * verification preferences.
478
+ *
479
+ * @param {boolean} followRedirect Whether HTTP redirects should be followed.
480
+ * @param {boolean} insecure Whether TLS certificate verification is disabled.
481
+ * @returns {import("undici").Dispatcher} The dispatcher to use for the request.
482
+ */
483
+ function selectDispatcher(followRedirect, insecure) {
484
+ if (insecure) {
485
+ return followRedirect ? insecureRedirectDispatcher : insecureAgent;
486
+ }
487
+ return followRedirect ? redirectDispatcher : defaultAgent;
488
+ }
489
+
490
+ // HTTP status codes that represent a redirect with a `location` header.
491
+ const REDIRECT_STATUS_CODES = new Set([301, 302, 303, 307, 308]);
492
+
493
+ /**
494
+ * Issue an undici request, following redirects manually when running under Bun.
495
+ *
496
+ * On Node.js the redirect-following interceptor baked into the dispatcher does
497
+ * the work, so this simply forwards to `undiciRequest`. On Bun (where the
498
+ * interceptor API is unavailable) we loop on 3xx responses, draining each
499
+ * intermediate body and resolving relative `location` headers, up to
500
+ * `MAX_REDIRECTIONS` hops.
501
+ *
502
+ * @param {URL} url Request URL.
503
+ * @param {Object} requestOptions Options passed to `undiciRequest`.
504
+ * @param {boolean} followRedirect Whether redirects should be followed.
505
+ * @returns {Promise<Object>} The final undici response.
506
+ */
507
+ async function requestWithRedirects(url, requestOptions, followRedirect) {
508
+ if (!isBun || !followRedirect) {
509
+ return await undiciRequest(url, requestOptions);
510
+ }
511
+ let currentUrl = url;
512
+ let redirections = 0;
513
+ while (true) {
514
+ const response = await undiciRequest(currentUrl, requestOptions);
515
+ const location = response.headers?.location;
516
+ if (
517
+ !REDIRECT_STATUS_CODES.has(response.statusCode) ||
518
+ !location ||
519
+ redirections >= MAX_REDIRECTIONS
520
+ ) {
521
+ return response;
522
+ }
523
+ // Drain the intermediate response body so the connection can be reused.
524
+ try {
525
+ await response.body.dump();
526
+ } catch {
527
+ // Ignore drain failures; the socket will be discarded.
528
+ }
529
+ currentUrl = new URL(location, currentUrl);
530
+ redirections += 1;
531
+ // 303, and 301/302 for anything other than GET/HEAD, must switch to GET
532
+ // without a body, matching how undici's redirect interceptor behaves.
533
+ const method = (requestOptions.method || "GET").toUpperCase();
534
+ if (
535
+ response.statusCode === 303 ||
536
+ ((response.statusCode === 301 || response.statusCode === 302) &&
537
+ method !== "GET" &&
538
+ method !== "HEAD")
539
+ ) {
540
+ requestOptions.method = "GET";
541
+ requestOptions.body = undefined;
542
+ }
543
+ }
544
+ }
545
+
546
+ /**
547
+ * Perform a single HTTP request and return a `got`-like response object,
548
+ * running the configured hooks along the way.
549
+ *
550
+ * @param {Object} mergedOptions Fully merged request options including `url`.
551
+ * @returns {Promise<Object>} Response object with `statusCode`, `headers`,
552
+ * `body`, `rawBody`, `url` and `request.options`.
553
+ */
554
+ async function doRequest(mergedOptions) {
555
+ const options = mergedOptions;
556
+ const url =
557
+ options.url instanceof URL ? options.url : new URL(String(options.url));
558
+ options.url = url;
559
+
560
+ // --- Test cassette layer (single network seam) ---
561
+ // When an interceptor is installed (see setHttpInterceptor), it is the
562
+ // authority for every request: a replay hit short-circuits the network
563
+ // call; an unmatched request throws a loud CassetteMissError so offline
564
+ // tests never silently reach the live network. Returns null in
565
+ // pass-through (record) mode to let the real request proceed.
566
+ if (httpInterceptor) {
567
+ const cassetteResponse = await httpInterceptor({
568
+ method: (options.method || "GET").toUpperCase(),
569
+ url,
570
+ headers: options.headers || {},
571
+ body: options.body,
572
+ responseType: options.responseType,
573
+ options,
574
+ });
575
+ if (cassetteResponse) {
576
+ return cassetteResponse;
577
+ }
578
+ }
579
+
580
+ // beforeRequest hooks may mutate options (e.g. set context) or throw to abort
581
+ // the request (dry-run mode). Return values are ignored, matching how cdxgen
582
+ // uses these hooks with got.
583
+ for (const hook of options.hooks?.beforeRequest || []) {
584
+ await hook(options);
585
+ }
586
+
587
+ const { body, headers } = resolveRequestBody(options);
588
+ const method = (options.method || "GET").toUpperCase();
589
+
590
+ // Serve cacheable GET requests from the in-memory cache when enabled.
591
+ const cacheable = method === "GET" && !isCacheDisabled();
592
+ const cacheKey = cacheable ? cacheKeyFor(method, url) : undefined;
593
+ if (cacheable && responseCache.has(cacheKey)) {
594
+ return responseCache.get(cacheKey);
595
+ }
596
+
597
+ const timeoutMs = resolveTimeout(options.timeout);
598
+ const signal = timeoutMs ? AbortSignal.timeout(timeoutMs) : undefined;
599
+
600
+ const followRedirect = options.followRedirect !== false;
601
+ const insecure = options.https?.rejectUnauthorized === false;
602
+ const requestOptions = {
603
+ method,
604
+ headers,
605
+ body: method === "GET" || method === "HEAD" ? undefined : body,
606
+ dispatcher: selectDispatcher(followRedirect, insecure),
607
+ signal,
608
+ };
609
+
610
+ let undiciResponse;
611
+ try {
612
+ undiciResponse = await requestWithRedirects(
613
+ url,
614
+ requestOptions,
615
+ followRedirect,
616
+ );
617
+ } catch (err) {
618
+ const requestError = new RequestError(err, options);
619
+ for (const hook of options.hooks?.beforeError || []) {
620
+ await hook(requestError);
621
+ }
622
+ throw requestError;
623
+ }
624
+
625
+ const { body: decodedBody, rawBody } = await readBody(
626
+ undiciResponse,
627
+ options.responseType,
628
+ );
629
+
630
+ const response = {
631
+ statusCode: undiciResponse.statusCode,
632
+ headers: undiciResponse.headers,
633
+ body: decodedBody,
634
+ rawBody,
635
+ url: url.toString(),
636
+ request: { options },
637
+ };
638
+
639
+ const throwHttpErrors = options.throwHttpErrors !== false;
640
+ if (throwHttpErrors && response.statusCode >= 400) {
641
+ const httpError = new HTTPError(response, options);
642
+ for (const hook of options.hooks?.beforeError || []) {
643
+ await hook(httpError);
644
+ }
645
+ throw httpError;
646
+ }
647
+
648
+ let finalResponse = response;
649
+ for (const hook of options.hooks?.afterResponse || []) {
650
+ finalResponse = (await hook(finalResponse)) || finalResponse;
651
+ }
652
+
653
+ // Only successful responses are cached, matching HTTP cache semantics.
654
+ if (cacheable && finalResponse.statusCode < 400) {
655
+ responseCache.set(cacheKey, finalResponse);
656
+ }
657
+ return finalResponse;
658
+ }
659
+
660
+ /**
661
+ * Kick off a request and return a promise augmented with a lazy `.json()`
662
+ * helper, mirroring `got`'s `client(url).json()` convenience.
663
+ *
664
+ * @param {Object} mergedOptions Fully merged request options including `url`.
665
+ * @returns {Promise<Object> & {json: function(): Promise<any>}} Response promise.
666
+ */
667
+ function requestWithHelpers(mergedOptions) {
668
+ const promise = doRequest(mergedOptions);
669
+ promise.json = () =>
670
+ promise.then((response) => {
671
+ if (typeof response.body === "string") {
672
+ return response.body.length ? JSON.parse(response.body) : undefined;
673
+ }
674
+ if (Buffer.isBuffer(response.body)) {
675
+ const text = response.body.toString("utf-8");
676
+ return text.length ? JSON.parse(text) : undefined;
677
+ }
678
+ return response.body;
679
+ });
680
+ return promise;
681
+ }
682
+
683
+ /**
684
+ * Create a `got`-compatible HTTP client bound to the supplied defaults.
685
+ *
686
+ * @param {Object} [defaults] Default request options merged into every call.
687
+ * @returns {Function} Callable client exposing `get`/`post`/`put`/`head`,
688
+ * `extend`, `defaults` and `hooks`.
689
+ */
690
+ export function createHttpClient(defaults = {}) {
691
+ const clientDefaults = {
692
+ ...defaults,
693
+ headers: { ...(defaults.headers || {}) },
694
+ hooks: mergeHooks(defaults.hooks),
695
+ context: { ...(defaults.context || {}) },
696
+ };
697
+
698
+ const client = (url, options = {}) =>
699
+ requestWithHelpers(mergeOptions(clientDefaults, { ...options, url }));
700
+
701
+ const verb =
702
+ (method) =>
703
+ (url, options = {}) =>
704
+ requestWithHelpers(
705
+ mergeOptions(clientDefaults, { ...options, method, url }),
706
+ );
707
+
708
+ client.get = verb("GET");
709
+ client.post = verb("POST");
710
+ client.put = verb("PUT");
711
+ client.head = verb("HEAD");
712
+ client.delete = verb("DELETE");
713
+
714
+ /**
715
+ * Derive a new client whose defaults are this client's defaults merged with
716
+ * the supplied options.
717
+ *
718
+ * @param {Object} [moreDefaults] Additional defaults to merge.
719
+ * @returns {Function} A new client instance.
720
+ */
721
+ client.extend = (moreDefaults = {}) =>
722
+ createHttpClient(mergeOptions(clientDefaults, moreDefaults));
723
+
724
+ // Expose the resolved defaults and hooks the same way got does, so existing
725
+ // code and tests can reach `client.defaults.options.hooks` and `client.hooks`.
726
+ client.defaults = { options: clientDefaults };
727
+ client.hooks = clientDefaults.hooks;
728
+
729
+ return client;
730
+ }