@cdxgen/cdxgen 0.0.1 → 13.0.1
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.
- package/README.md +921 -87
- package/bin/audit.js +239 -0
- package/bin/cdxgen.js +2335 -0
- package/bin/convert.js +220 -0
- package/bin/evinse.js +353 -0
- package/bin/hbom.js +504 -0
- package/bin/repl.js +2224 -0
- package/bin/sign.js +195 -0
- package/bin/tracebom.js +303 -0
- package/bin/validate.js +268 -0
- package/bin/verify.js +189 -0
- package/data/README.md +307 -0
- package/data/bom-1.4.schema.json +1605 -0
- package/data/bom-1.5.schema.json +3660 -0
- package/data/bom-1.6.schema.json +5511 -0
- package/data/bom-1.7.schema.json +6700 -0
- package/data/cbomosdb-queries.json +68 -0
- package/data/component-tags.json +339 -0
- package/data/container-knowledge-index.json +125 -0
- package/data/cosdb-queries.json +17 -0
- package/data/crypto-oid.json +1998 -0
- package/data/cryptography-defs.json +3793 -0
- package/data/cryptography-defs.schema.json +576 -0
- package/data/cyclonedx-2.0-bundled.schema.json +7182 -0
- package/data/frameworks-list.json +219 -0
- package/data/glibc-stdlib.json +117 -0
- package/data/gtfobins-index.json +6296 -0
- package/data/helpers/init.gradle +71 -0
- package/data/jsf-0.82.schema.json +211 -0
- package/data/known-licenses.json +82 -0
- package/data/lic-mapping.json +338 -0
- package/data/license-aliases.json +6624 -0
- package/data/license-db.json +39059 -0
- package/data/license-deprecations.json +302 -0
- package/data/lolbas-index.json +150 -0
- package/data/predictive-audit-allowlist.json +11 -0
- package/data/pypi-pkg-aliases.json +1199 -0
- package/data/python-stdlib.json +308 -0
- package/data/queries-darwin.json +193 -0
- package/data/queries-win.json +257 -0
- package/data/queries.json +268 -0
- package/data/ruby-known-modules.json +281 -0
- package/data/rules/ai-agent-governance.yaml +323 -0
- package/data/rules/ai-bom.yaml +268 -0
- package/data/rules/ai-oversight.yaml +186 -0
- package/data/rules/ai-provenance.yaml +92 -0
- package/data/rules/asar-archives.yaml +150 -0
- package/data/rules/cbom-security.yaml +165 -0
- package/data/rules/chrome-extensions.yaml +248 -0
- package/data/rules/ci-permissions.yaml +802 -0
- package/data/rules/container-risk.yaml +353 -0
- package/data/rules/dependency-sources.yaml +236 -0
- package/data/rules/golem-go.yaml +229 -0
- package/data/rules/hbom-compliance.yaml +325 -0
- package/data/rules/hbom-performance.yaml +307 -0
- package/data/rules/hbom-security.yaml +248 -0
- package/data/rules/host-topology.yaml +165 -0
- package/data/rules/mcp-servers.yaml +388 -0
- package/data/rules/obom-runtime.yaml +1776 -0
- package/data/rules/package-integrity.yaml +364 -0
- package/data/rules/rootfs-hardening.yaml +179 -0
- package/data/rules/vscode-extensions.yaml +237 -0
- package/data/spdx-export.schema.json +6794 -0
- package/data/spdx-license-list.json +7449 -0
- package/data/spdx-licenses.json +759 -0
- package/data/spdx.schema.json +819 -0
- package/data/templates/README.md +3 -0
- package/data/templates/asvs-4.0.3.cdx.json +2943 -0
- package/data/templates/asvs-5.0.cdx.json +3046 -0
- package/data/templates/bsimm-v13.cdx.json +1008 -0
- package/data/templates/masvs-2.0.0.cdx.json +225 -0
- package/data/templates/nist-ssdf-1.1.cdx.json +828 -0
- package/data/templates/pcissc-secure-slc-1.1.cdx.json +1027 -0
- package/data/templates/scvs-1.0.0.cdx.json +813 -0
- package/data/templates/ssaf-DRAFT-2023-11.cdx.json +127 -0
- package/data/vendor-alias.json +41967 -0
- package/data/wrapdb-releases.json +4227 -0
- package/index.cjs +15 -0
- package/lib/audit/index.js +2800 -0
- package/lib/audit/progress.js +114 -0
- package/lib/audit/reporters.js +937 -0
- package/lib/audit/scoring.js +560 -0
- package/lib/audit/targets.js +798 -0
- package/lib/cli/bomAssembly.js +1882 -0
- package/lib/cli/cliOptions.js +543 -0
- package/lib/cli/index.js +2759 -0
- package/lib/cli/jsBom.js +2087 -0
- package/lib/cli/jvmBom.js +1858 -0
- package/lib/cli/managedBom.js +2083 -0
- package/lib/cli/nativeBom.js +2125 -0
- package/lib/core/activity.js +1087 -0
- package/lib/core/env.js +719 -0
- package/lib/core/fs.js +1058 -0
- package/lib/core/httpClient.js +730 -0
- package/lib/core/logger.js +280 -0
- package/lib/core/parallel.js +323 -0
- package/lib/core/paths.js +70 -0
- package/lib/core/projectConfig.js +122 -0
- package/lib/core/propertySanitizer.js +174 -0
- package/lib/core/spdx.js +5 -0
- package/lib/core/state.js +59 -0
- package/lib/core/text.js +207 -0
- package/lib/core/ui.js +920 -0
- package/lib/core/urls.js +84 -0
- package/lib/ecosystems/asarutils.js +1636 -0
- package/lib/ecosystems/bunutils.js +402 -0
- package/lib/ecosystems/caxa.js +77 -0
- package/lib/ecosystems/chromextutils.js +1174 -0
- package/lib/ecosystems/cmakeResolver.js +587 -0
- package/lib/ecosystems/cppEvidence.js +305 -0
- package/lib/ecosystems/denoutils.js +1094 -0
- package/lib/ecosystems/dotnetutils.js +132 -0
- package/lib/ecosystems/ecosystems.js +2772 -0
- package/lib/ecosystems/golem.js +1807 -0
- package/lib/ecosystems/gradleutils.js +1048 -0
- package/lib/ecosystems/jsEvidence.js +317 -0
- package/lib/ecosystems/npmutils.js +586 -0
- package/lib/ecosystems/parsers-bazel.js +875 -0
- package/lib/ecosystems/parsers-dotnet.js +1430 -0
- package/lib/ecosystems/parsers-gleam.js +302 -0
- package/lib/ecosystems/parsers-go.js +818 -0
- package/lib/ecosystems/parsers-js.js +4222 -0
- package/lib/ecosystems/parsers-jvm.js +948 -0
- package/lib/ecosystems/parsers-misc.js +3191 -0
- package/lib/ecosystems/parsers-python.js +2070 -0
- package/lib/ecosystems/parsers-rust.js +1294 -0
- package/lib/ecosystems/parsers-zig.js +861 -0
- package/lib/ecosystems/pep770.js +341 -0
- package/lib/ecosystems/pylockutils.js +427 -0
- package/lib/ecosystems/pythonutils.js +1281 -0
- package/lib/ecosystems/registryProvenance.js +1003 -0
- package/lib/ecosystems/remote/huggingface.js +1343 -0
- package/lib/ecosystems/rubyutils.js +1629 -0
- package/lib/ecosystems/rusi.js +820 -0
- package/lib/ecosystems/sbtutils.js +972 -0
- package/lib/ecosystems/tea.js +607 -0
- package/lib/ecosystems/utils.js +583 -0
- package/lib/ecosystems/zigResolver.js +410 -0
- package/lib/evinser/db.js +145 -0
- package/lib/evinser/evinser.js +2362 -0
- package/lib/evinser/scalasem.js +65 -0
- package/lib/evinser/swiftsem.js +767 -0
- package/lib/helpers/annotationFormatter.js +84 -0
- package/lib/helpers/bomSigner.js +312 -0
- package/lib/helpers/exportUtils.js +160 -0
- package/lib/helpers/remote/dependency-track.js +117 -0
- package/lib/helpers/versutils.js +202 -0
- package/lib/helpers/vsixutils.js +1069 -0
- package/lib/inventory/agentFormulationParser.js +322 -0
- package/lib/inventory/aiCollector.js +2140 -0
- package/lib/inventory/aiInventory.js +414 -0
- package/lib/inventory/aiModelVariants.js +121 -0
- package/lib/inventory/aiOversightCollector.js +661 -0
- package/lib/inventory/aiProvenanceCollector.js +822 -0
- package/lib/inventory/analyzer.js +6089 -0
- package/lib/inventory/analyzerScope.js +807 -0
- package/lib/inventory/astWorker.js +20 -0
- package/lib/inventory/atomUtils.js +1092 -0
- package/lib/inventory/auditCategories.js +192 -0
- package/lib/inventory/bomUtils.js +369 -0
- package/lib/inventory/cacheCommands.js +182 -0
- package/lib/inventory/cacheDir.js +104 -0
- package/lib/inventory/cbomutils.js +590 -0
- package/lib/inventory/cdxrs.js +434 -0
- package/lib/inventory/ciParsers/azurePipelines.js +295 -0
- package/lib/inventory/ciParsers/circleCi.js +286 -0
- package/lib/inventory/ciParsers/common.js +24 -0
- package/lib/inventory/ciParsers/githubActions.js +2434 -0
- package/lib/inventory/ciParsers/gitlabCi.js +213 -0
- package/lib/inventory/ciParsers/jenkins.js +180 -0
- package/lib/inventory/citations.js +234 -0
- package/lib/inventory/communityAiConfigParser.js +756 -0
- package/lib/inventory/containerRisk.js +204 -0
- package/lib/inventory/cryptoAlgorithmFamily.js +258 -0
- package/lib/inventory/deps.js +807 -0
- package/lib/inventory/depsUtils.js +588 -0
- package/lib/inventory/display.js +2128 -0
- package/lib/inventory/dosai.js +601 -0
- package/lib/inventory/dosaiParsers.js +154 -0
- package/lib/inventory/dynamic.js +145 -0
- package/lib/inventory/envcontext.js +1793 -0
- package/lib/inventory/evidenceUtils.js +774 -0
- package/lib/inventory/fetchBatch.js +779 -0
- package/lib/inventory/fetchRate.js +255 -0
- package/lib/inventory/forgeEnricher.js +300 -0
- package/lib/inventory/formulationParsers.js +422 -0
- package/lib/inventory/gtfobins.js +339 -0
- package/lib/inventory/hbom.js +719 -0
- package/lib/inventory/hbomAnalysis.js +310 -0
- package/lib/inventory/hbomLoader.js +35 -0
- package/lib/inventory/hostTopology.js +835 -0
- package/lib/inventory/inventoryStats.js +100 -0
- package/lib/inventory/jsonLike.js +121 -0
- package/lib/inventory/licenseEnhancer.js +918 -0
- package/lib/inventory/lolbas.js +285 -0
- package/lib/inventory/mcp.js +253 -0
- package/lib/inventory/mcpConfigParser.js +683 -0
- package/lib/inventory/mcpDiscovery.js +112 -0
- package/lib/inventory/mcpPinning.js +209 -0
- package/lib/inventory/osPackageResolver.js +493 -0
- package/lib/inventory/osinfo.js +383 -0
- package/lib/inventory/osqueryTransform.js +274 -0
- package/lib/inventory/plugins.js +466 -0
- package/lib/inventory/protobom.js +231 -0
- package/lib/inventory/protobomLoader.js +43 -0
- package/lib/inventory/provenanceUtils.js +224 -0
- package/lib/inventory/purl.js +749 -0
- package/lib/inventory/rustFormulationParser.js +339 -0
- package/lib/inventory/sbomDocument.js +340 -0
- package/lib/inventory/source.js +1488 -0
- package/lib/inventory/spdx.js +361 -0
- package/lib/inventory/spdxExpression.js +512 -0
- package/lib/inventory/spdxUtils.js +107 -0
- package/lib/inventory/table.js +267 -0
- package/lib/inventory/traceRunner.js +439 -0
- package/lib/inventory/unicodeScan.js +147 -0
- package/lib/managers/binary.js +3459 -0
- package/lib/managers/containerutils.js +125 -0
- package/lib/managers/docker.js +2145 -0
- package/lib/managers/dockerConnection.js +162 -0
- package/lib/managers/oci.js +704 -0
- package/lib/managers/piptree.js +267 -0
- package/lib/parsers/cmakeCache.js +199 -0
- package/lib/parsers/gguf.js +492 -0
- package/lib/parsers/gitAiNotes.js +233 -0
- package/lib/parsers/gitmodules.js +239 -0
- package/lib/parsers/htmlExtract.js +610 -0
- package/lib/parsers/huggingfaceManifest.js +551 -0
- package/lib/parsers/huggingfaceUtils.js +506 -0
- package/lib/parsers/iri.js +618 -0
- package/lib/parsers/npmrc.js +99 -0
- package/lib/parsers/ollama.js +101 -0
- package/lib/parsers/xml.js +841 -0
- package/lib/server/openapi.yaml +433 -0
- package/lib/server/server.js +616 -0
- package/lib/stages/postgen/annotator.js +977 -0
- package/lib/stages/postgen/auditBom.js +468 -0
- package/lib/stages/postgen/postgen.js +1239 -0
- package/lib/stages/postgen/ruleEngine.js +731 -0
- package/lib/stages/postgen/sortBom.js +195 -0
- package/lib/stages/postgen/spdxConverter.js +796 -0
- package/lib/stages/postgen/specVersionCompat.js +703 -0
- package/lib/stages/pregen/envAudit.js +388 -0
- package/lib/stages/pregen/pregen.js +637 -0
- package/lib/third-party/README.md +9 -0
- package/lib/third-party/arborist/CHANGELOG.md +1109 -0
- package/lib/third-party/arborist/LICENSE.md +20 -0
- package/lib/third-party/arborist/README.md +315 -0
- package/lib/third-party/arborist/lib/arborist/index.js +258 -0
- package/lib/third-party/arborist/lib/arborist/load-actual.js +605 -0
- package/lib/third-party/arborist/lib/arborist/load-virtual.js +300 -0
- package/lib/third-party/arborist/lib/bin-links.js +120 -0
- package/lib/third-party/arborist/lib/calc-dep-flags.js +130 -0
- package/lib/third-party/arborist/lib/case-insensitive-map.js +51 -0
- package/lib/third-party/arborist/lib/consistent-resolve.js +42 -0
- package/lib/third-party/arborist/lib/debug.js +50 -0
- package/lib/third-party/arborist/lib/dep-valid.js +190 -0
- package/lib/third-party/arborist/lib/edge.js +417 -0
- package/lib/third-party/arborist/lib/from-path.js +36 -0
- package/lib/third-party/arborist/lib/gather-dep-set.js +43 -0
- package/lib/third-party/arborist/lib/index.js +22 -0
- package/lib/third-party/arborist/lib/inventory.js +138 -0
- package/lib/third-party/arborist/lib/link.js +169 -0
- package/lib/third-party/arborist/lib/node.js +1673 -0
- package/lib/third-party/arborist/lib/npm-extension.js +45 -0
- package/lib/third-party/arborist/lib/override-resolves.js +11 -0
- package/lib/third-party/arborist/lib/override-set.js +319 -0
- package/lib/third-party/arborist/lib/package-extensions.js +289 -0
- package/lib/third-party/arborist/lib/printable.js +210 -0
- package/lib/third-party/arborist/lib/proc-log.js +30 -0
- package/lib/third-party/arborist/lib/realpath.js +100 -0
- package/lib/third-party/arborist/lib/relpath.js +4 -0
- package/lib/third-party/arborist/lib/shrinkwrap.js +1291 -0
- package/lib/third-party/arborist/lib/spec-from-lock.js +34 -0
- package/lib/third-party/arborist/lib/tree-check.js +165 -0
- package/lib/third-party/arborist/lib/validate-npm-package-name.js +107 -0
- package/lib/third-party/arborist/lib/version-from-tgz.js +51 -0
- package/lib/third-party/arborist/lib/yarn-lock.js +397 -0
- package/lib/validator/bomValidator.js +985 -0
- package/lib/validator/complianceEngine.js +241 -0
- package/lib/validator/complianceRules.js +1680 -0
- package/lib/validator/generated/runtime.mjs +17 -0
- package/lib/validator/generated/validate-1.6.mjs +21258 -0
- package/lib/validator/generated/validate-1.7.mjs +24803 -0
- package/lib/validator/generated/validate-2.0.mjs +22931 -0
- package/lib/validator/index.js +246 -0
- package/lib/validator/reporters/annotations.js +142 -0
- package/lib/validator/reporters/console.js +160 -0
- package/lib/validator/reporters/index.js +41 -0
- package/lib/validator/reporters/json.js +37 -0
- package/lib/validator/reporters/sarif.js +184 -0
- package/package.json +209 -26
- package/types/bin/audit.d.ts +3 -0
- package/types/bin/audit.d.ts.map +1 -0
- package/types/bin/cdxgen.d.ts +3 -0
- package/types/bin/cdxgen.d.ts.map +1 -0
- package/types/bin/convert.d.ts +3 -0
- package/types/bin/convert.d.ts.map +1 -0
- package/types/bin/evinse.d.ts +3 -0
- package/types/bin/evinse.d.ts.map +1 -0
- package/types/bin/hbom.d.ts +3 -0
- package/types/bin/hbom.d.ts.map +1 -0
- package/types/bin/repl.d.ts +3 -0
- package/types/bin/repl.d.ts.map +1 -0
- package/types/bin/sign.d.ts +3 -0
- package/types/bin/sign.d.ts.map +1 -0
- package/types/bin/tracebom.d.ts +3 -0
- package/types/bin/tracebom.d.ts.map +1 -0
- package/types/bin/validate.d.ts +14 -0
- package/types/bin/validate.d.ts.map +1 -0
- package/types/bin/verify.d.ts +3 -0
- package/types/bin/verify.d.ts.map +1 -0
- package/types/lib/audit/index.d.ts +153 -0
- package/types/lib/audit/index.d.ts.map +1 -0
- package/types/lib/audit/progress.d.ts +31 -0
- package/types/lib/audit/progress.d.ts.map +1 -0
- package/types/lib/audit/reporters.d.ts +62 -0
- package/types/lib/audit/reporters.d.ts.map +1 -0
- package/types/lib/audit/scoring.d.ts +36 -0
- package/types/lib/audit/scoring.d.ts.map +1 -0
- package/types/lib/audit/targets.d.ts +77 -0
- package/types/lib/audit/targets.d.ts.map +1 -0
- package/types/lib/cli/bomAssembly.d.ts +329 -0
- package/types/lib/cli/bomAssembly.d.ts.map +1 -0
- package/types/lib/cli/cliOptions.d.ts +156 -0
- package/types/lib/cli/cliOptions.d.ts.map +1 -0
- package/types/lib/cli/index.d.ts +107 -0
- package/types/lib/cli/index.d.ts.map +1 -0
- package/types/lib/cli/jsBom.d.ts +94 -0
- package/types/lib/cli/jsBom.d.ts.map +1 -0
- package/types/lib/cli/jvmBom.d.ts +54 -0
- package/types/lib/cli/jvmBom.d.ts.map +1 -0
- package/types/lib/cli/managedBom.d.ts +105 -0
- package/types/lib/cli/managedBom.d.ts.map +1 -0
- package/types/lib/cli/nativeBom.d.ts +143 -0
- package/types/lib/cli/nativeBom.d.ts.map +1 -0
- package/types/lib/core/activity.d.ts +178 -0
- package/types/lib/core/activity.d.ts.map +1 -0
- package/types/lib/core/env.d.ts +192 -0
- package/types/lib/core/env.d.ts.map +1 -0
- package/types/lib/core/fs.d.ts +158 -0
- package/types/lib/core/fs.d.ts.map +1 -0
- package/types/lib/core/httpClient.d.ts +149 -0
- package/types/lib/core/httpClient.d.ts.map +1 -0
- package/types/lib/core/logger.d.ts +50 -0
- package/types/lib/core/logger.d.ts.map +1 -0
- package/types/lib/core/parallel.d.ts +95 -0
- package/types/lib/core/parallel.d.ts.map +1 -0
- package/types/lib/core/paths.d.ts +36 -0
- package/types/lib/core/paths.d.ts.map +1 -0
- package/types/lib/core/projectConfig.d.ts +23 -0
- package/types/lib/core/projectConfig.d.ts.map +1 -0
- package/types/lib/core/propertySanitizer.d.ts +23 -0
- package/types/lib/core/propertySanitizer.d.ts.map +1 -0
- package/types/lib/core/spdx.d.ts +5 -0
- package/types/lib/core/spdx.d.ts.map +1 -0
- package/types/lib/core/state.d.ts +20 -0
- package/types/lib/core/state.d.ts.map +1 -0
- package/types/lib/core/text.d.ts +78 -0
- package/types/lib/core/text.d.ts.map +1 -0
- package/types/lib/core/ui.d.ts +87 -0
- package/types/lib/core/ui.d.ts.map +1 -0
- package/types/lib/core/urls.d.ts +43 -0
- package/types/lib/core/urls.d.ts.map +1 -0
- package/types/lib/ecosystems/asarutils.d.ts +71 -0
- package/types/lib/ecosystems/asarutils.d.ts.map +1 -0
- package/types/lib/ecosystems/bunutils.d.ts +38 -0
- package/types/lib/ecosystems/bunutils.d.ts.map +1 -0
- package/types/lib/ecosystems/caxa.d.ts +8 -0
- package/types/lib/ecosystems/caxa.d.ts.map +1 -0
- package/types/lib/ecosystems/chromextutils.d.ts +97 -0
- package/types/lib/ecosystems/chromextutils.d.ts.map +1 -0
- package/types/lib/ecosystems/cmakeResolver.d.ts +176 -0
- package/types/lib/ecosystems/cmakeResolver.d.ts.map +1 -0
- package/types/lib/ecosystems/cppEvidence.d.ts +35 -0
- package/types/lib/ecosystems/cppEvidence.d.ts.map +1 -0
- package/types/lib/ecosystems/denoutils.d.ts +76 -0
- package/types/lib/ecosystems/denoutils.d.ts.map +1 -0
- package/types/lib/ecosystems/dotnetutils.d.ts +45 -0
- package/types/lib/ecosystems/dotnetutils.d.ts.map +1 -0
- package/types/lib/ecosystems/ecosystems.d.ts +279 -0
- package/types/lib/ecosystems/ecosystems.d.ts.map +1 -0
- package/types/lib/ecosystems/golem.d.ts +60 -0
- package/types/lib/ecosystems/golem.d.ts.map +1 -0
- package/types/lib/ecosystems/gradleutils.d.ts +139 -0
- package/types/lib/ecosystems/gradleutils.d.ts.map +1 -0
- package/types/lib/ecosystems/jsEvidence.d.ts +17 -0
- package/types/lib/ecosystems/jsEvidence.d.ts.map +1 -0
- package/types/lib/ecosystems/npmutils.d.ts +183 -0
- package/types/lib/ecosystems/npmutils.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-bazel.d.ts +36 -0
- package/types/lib/ecosystems/parsers-bazel.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-dotnet.d.ts +116 -0
- package/types/lib/ecosystems/parsers-dotnet.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-gleam.d.ts +33 -0
- package/types/lib/ecosystems/parsers-gleam.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-go.d.ts +92 -0
- package/types/lib/ecosystems/parsers-go.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-js.d.ts +242 -0
- package/types/lib/ecosystems/parsers-js.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-jvm.d.ts +100 -0
- package/types/lib/ecosystems/parsers-jvm.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-misc.d.ts +450 -0
- package/types/lib/ecosystems/parsers-misc.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-python.d.ts +145 -0
- package/types/lib/ecosystems/parsers-python.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-rust.d.ts +56 -0
- package/types/lib/ecosystems/parsers-rust.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-zig.d.ts +83 -0
- package/types/lib/ecosystems/parsers-zig.d.ts.map +1 -0
- package/types/lib/ecosystems/pep770.d.ts +38 -0
- package/types/lib/ecosystems/pep770.d.ts.map +1 -0
- package/types/lib/ecosystems/pylockutils.d.ts +68 -0
- package/types/lib/ecosystems/pylockutils.d.ts.map +1 -0
- package/types/lib/ecosystems/pythonutils.d.ts +70 -0
- package/types/lib/ecosystems/pythonutils.d.ts.map +1 -0
- package/types/lib/ecosystems/registryProvenance.d.ts +26 -0
- package/types/lib/ecosystems/registryProvenance.d.ts.map +1 -0
- package/types/lib/ecosystems/remote/huggingface.d.ts +31 -0
- package/types/lib/ecosystems/remote/huggingface.d.ts.map +1 -0
- package/types/lib/ecosystems/rubyutils.d.ts +182 -0
- package/types/lib/ecosystems/rubyutils.d.ts.map +1 -0
- package/types/lib/ecosystems/rusi.d.ts +40 -0
- package/types/lib/ecosystems/rusi.d.ts.map +1 -0
- package/types/lib/ecosystems/sbtutils.d.ts +179 -0
- package/types/lib/ecosystems/sbtutils.d.ts.map +1 -0
- package/types/lib/ecosystems/tea.d.ts +180 -0
- package/types/lib/ecosystems/tea.d.ts.map +1 -0
- package/types/lib/ecosystems/utils.d.ts +41 -0
- package/types/lib/ecosystems/utils.d.ts.map +1 -0
- package/types/lib/ecosystems/zigResolver.d.ts +70 -0
- package/types/lib/ecosystems/zigResolver.d.ts.map +1 -0
- package/types/lib/evinser/db.d.ts +17 -0
- package/types/lib/evinser/db.d.ts.map +1 -0
- package/types/lib/evinser/evinser.d.ts +354 -0
- package/types/lib/evinser/evinser.d.ts.map +1 -0
- package/types/lib/evinser/scalasem.d.ts +15 -0
- package/types/lib/evinser/scalasem.d.ts.map +1 -0
- package/types/lib/evinser/swiftsem.d.ts +103 -0
- package/types/lib/evinser/swiftsem.d.ts.map +1 -0
- package/types/lib/helpers/annotationFormatter.d.ts +23 -0
- package/types/lib/helpers/annotationFormatter.d.ts.map +1 -0
- package/types/lib/helpers/bomSigner.d.ts +28 -0
- package/types/lib/helpers/bomSigner.d.ts.map +1 -0
- package/types/lib/helpers/exportUtils.d.ts +52 -0
- package/types/lib/helpers/exportUtils.d.ts.map +1 -0
- package/types/lib/helpers/remote/dependency-track.d.ts +23 -0
- package/types/lib/helpers/remote/dependency-track.d.ts.map +1 -0
- package/types/lib/helpers/versutils.d.ts +8 -0
- package/types/lib/helpers/versutils.d.ts.map +1 -0
- package/types/lib/helpers/vsixutils.d.ts +130 -0
- package/types/lib/helpers/vsixutils.d.ts.map +1 -0
- package/types/lib/inventory/agentFormulationParser.d.ts +21 -0
- package/types/lib/inventory/agentFormulationParser.d.ts.map +1 -0
- package/types/lib/inventory/aiCollector.d.ts +61 -0
- package/types/lib/inventory/aiCollector.d.ts.map +1 -0
- package/types/lib/inventory/aiInventory.d.ts +103 -0
- package/types/lib/inventory/aiInventory.d.ts.map +1 -0
- package/types/lib/inventory/aiModelVariants.d.ts +31 -0
- package/types/lib/inventory/aiModelVariants.d.ts.map +1 -0
- package/types/lib/inventory/aiOversightCollector.d.ts +28 -0
- package/types/lib/inventory/aiOversightCollector.d.ts.map +1 -0
- package/types/lib/inventory/aiProvenanceCollector.d.ts +13 -0
- package/types/lib/inventory/aiProvenanceCollector.d.ts.map +1 -0
- package/types/lib/inventory/analyzer.d.ts +157 -0
- package/types/lib/inventory/analyzer.d.ts.map +1 -0
- package/types/lib/inventory/analyzerScope.d.ts +106 -0
- package/types/lib/inventory/analyzerScope.d.ts.map +1 -0
- package/types/lib/inventory/astWorker.d.ts +9 -0
- package/types/lib/inventory/astWorker.d.ts.map +1 -0
- package/types/lib/inventory/atomUtils.d.ts +159 -0
- package/types/lib/inventory/atomUtils.d.ts.map +1 -0
- package/types/lib/inventory/auditCategories.d.ts +80 -0
- package/types/lib/inventory/auditCategories.d.ts.map +1 -0
- package/types/lib/inventory/bomUtils.d.ts +145 -0
- package/types/lib/inventory/bomUtils.d.ts.map +1 -0
- package/types/lib/inventory/cacheCommands.d.ts +28 -0
- package/types/lib/inventory/cacheCommands.d.ts.map +1 -0
- package/types/lib/inventory/cacheDir.d.ts +55 -0
- package/types/lib/inventory/cacheDir.d.ts.map +1 -0
- package/types/lib/inventory/cbomutils.d.ts +37 -0
- package/types/lib/inventory/cbomutils.d.ts.map +1 -0
- package/types/lib/inventory/cdxrs.d.ts +90 -0
- package/types/lib/inventory/cdxrs.d.ts.map +1 -0
- package/types/lib/inventory/ciParsers/azurePipelines.d.ts +27 -0
- package/types/lib/inventory/ciParsers/azurePipelines.d.ts.map +1 -0
- package/types/lib/inventory/ciParsers/circleCi.d.ts +27 -0
- package/types/lib/inventory/ciParsers/circleCi.d.ts.map +1 -0
- package/types/lib/inventory/ciParsers/common.d.ts +11 -0
- package/types/lib/inventory/ciParsers/common.d.ts.map +1 -0
- package/types/lib/inventory/ciParsers/githubActions.d.ts +38 -0
- package/types/lib/inventory/ciParsers/githubActions.d.ts.map +1 -0
- package/types/lib/inventory/ciParsers/gitlabCi.d.ts +26 -0
- package/types/lib/inventory/ciParsers/gitlabCi.d.ts.map +1 -0
- package/types/lib/inventory/ciParsers/jenkins.d.ts +26 -0
- package/types/lib/inventory/ciParsers/jenkins.d.ts.map +1 -0
- package/types/lib/inventory/citations.d.ts +90 -0
- package/types/lib/inventory/citations.d.ts.map +1 -0
- package/types/lib/inventory/communityAiConfigParser.d.ts +14 -0
- package/types/lib/inventory/communityAiConfigParser.d.ts.map +1 -0
- package/types/lib/inventory/containerRisk.d.ts +20 -0
- package/types/lib/inventory/containerRisk.d.ts.map +1 -0
- package/types/lib/inventory/cryptoAlgorithmFamily.d.ts +37 -0
- package/types/lib/inventory/cryptoAlgorithmFamily.d.ts.map +1 -0
- package/types/lib/inventory/deps.d.ts +140 -0
- package/types/lib/inventory/deps.d.ts.map +1 -0
- package/types/lib/inventory/depsUtils.d.ts +74 -0
- package/types/lib/inventory/depsUtils.d.ts.map +1 -0
- package/types/lib/inventory/display.d.ts +227 -0
- package/types/lib/inventory/display.d.ts.map +1 -0
- package/types/lib/inventory/dosai.d.ts +130 -0
- package/types/lib/inventory/dosai.d.ts.map +1 -0
- package/types/lib/inventory/dosaiParsers.d.ts +59 -0
- package/types/lib/inventory/dosaiParsers.d.ts.map +1 -0
- package/types/lib/inventory/dynamic.d.ts +25 -0
- package/types/lib/inventory/dynamic.d.ts.map +1 -0
- package/types/lib/inventory/envcontext.d.ts +377 -0
- package/types/lib/inventory/envcontext.d.ts.map +1 -0
- package/types/lib/inventory/evidenceUtils.d.ts +74 -0
- package/types/lib/inventory/evidenceUtils.d.ts.map +1 -0
- package/types/lib/inventory/fetchBatch.d.ts +127 -0
- package/types/lib/inventory/fetchBatch.d.ts.map +1 -0
- package/types/lib/inventory/fetchRate.d.ts +118 -0
- package/types/lib/inventory/fetchRate.d.ts.map +1 -0
- package/types/lib/inventory/forgeEnricher.d.ts +31 -0
- package/types/lib/inventory/forgeEnricher.d.ts.map +1 -0
- package/types/lib/inventory/formulationParsers.d.ts +50 -0
- package/types/lib/inventory/formulationParsers.d.ts.map +1 -0
- package/types/lib/inventory/gtfobins.d.ts +27 -0
- package/types/lib/inventory/gtfobins.d.ts.map +1 -0
- package/types/lib/inventory/hbom.d.ts +58 -0
- package/types/lib/inventory/hbom.d.ts.map +1 -0
- package/types/lib/inventory/hbomAnalysis.d.ts +56 -0
- package/types/lib/inventory/hbomAnalysis.d.ts.map +1 -0
- package/types/lib/inventory/hbomLoader.d.ts +7 -0
- package/types/lib/inventory/hbomLoader.d.ts.map +1 -0
- package/types/lib/inventory/hostTopology.d.ts +47 -0
- package/types/lib/inventory/hostTopology.d.ts.map +1 -0
- package/types/lib/inventory/inventoryStats.d.ts +42 -0
- package/types/lib/inventory/inventoryStats.d.ts.map +1 -0
- package/types/lib/inventory/jsonLike.d.ts +23 -0
- package/types/lib/inventory/jsonLike.d.ts.map +1 -0
- package/types/lib/inventory/licenseEnhancer.d.ts +70 -0
- package/types/lib/inventory/licenseEnhancer.d.ts.map +1 -0
- package/types/lib/inventory/lolbas.d.ts +16 -0
- package/types/lib/inventory/lolbas.d.ts.map +1 -0
- package/types/lib/inventory/mcp.d.ts +29 -0
- package/types/lib/inventory/mcp.d.ts.map +1 -0
- package/types/lib/inventory/mcpConfigParser.d.ts +20 -0
- package/types/lib/inventory/mcpConfigParser.d.ts.map +1 -0
- package/types/lib/inventory/mcpDiscovery.d.ts +33 -0
- package/types/lib/inventory/mcpDiscovery.d.ts.map +1 -0
- package/types/lib/inventory/mcpPinning.d.ts +11 -0
- package/types/lib/inventory/mcpPinning.d.ts.map +1 -0
- package/types/lib/inventory/osPackageResolver.d.ts +49 -0
- package/types/lib/inventory/osPackageResolver.d.ts.map +1 -0
- package/types/lib/inventory/osinfo.d.ts +201 -0
- package/types/lib/inventory/osinfo.d.ts.map +1 -0
- package/types/lib/inventory/osqueryTransform.d.ts +84 -0
- package/types/lib/inventory/osqueryTransform.d.ts.map +1 -0
- package/types/lib/inventory/plugins.d.ts +58 -0
- package/types/lib/inventory/plugins.d.ts.map +1 -0
- package/types/lib/inventory/protobom.d.ts +71 -0
- package/types/lib/inventory/protobom.d.ts.map +1 -0
- package/types/lib/inventory/protobomLoader.d.ts +17 -0
- package/types/lib/inventory/protobomLoader.d.ts.map +1 -0
- package/types/lib/inventory/provenanceUtils.d.ts +98 -0
- package/types/lib/inventory/provenanceUtils.d.ts.map +1 -0
- package/types/lib/inventory/purl.d.ts +313 -0
- package/types/lib/inventory/purl.d.ts.map +1 -0
- package/types/lib/inventory/rustFormulationParser.d.ts +17 -0
- package/types/lib/inventory/rustFormulationParser.d.ts.map +1 -0
- package/types/lib/inventory/sbomDocument.d.ts +59 -0
- package/types/lib/inventory/sbomDocument.d.ts.map +1 -0
- package/types/lib/inventory/source.d.ts +163 -0
- package/types/lib/inventory/source.d.ts.map +1 -0
- package/types/lib/inventory/spdx.d.ts +66 -0
- package/types/lib/inventory/spdx.d.ts.map +1 -0
- package/types/lib/inventory/spdxExpression.d.ts +58 -0
- package/types/lib/inventory/spdxExpression.d.ts.map +1 -0
- package/types/lib/inventory/spdxUtils.d.ts +12 -0
- package/types/lib/inventory/spdxUtils.d.ts.map +1 -0
- package/types/lib/inventory/table.d.ts +22 -0
- package/types/lib/inventory/table.d.ts.map +1 -0
- package/types/lib/inventory/traceRunner.d.ts +80 -0
- package/types/lib/inventory/traceRunner.d.ts.map +1 -0
- package/types/lib/inventory/unicodeScan.d.ts +46 -0
- package/types/lib/inventory/unicodeScan.d.ts.map +1 -0
- package/types/lib/managers/binary.d.ts +147 -0
- package/types/lib/managers/binary.d.ts.map +1 -0
- package/types/lib/managers/containerutils.d.ts +30 -0
- package/types/lib/managers/containerutils.d.ts.map +1 -0
- package/types/lib/managers/docker.d.ts +157 -0
- package/types/lib/managers/docker.d.ts.map +1 -0
- package/types/lib/managers/dockerConnection.d.ts +42 -0
- package/types/lib/managers/dockerConnection.d.ts.map +1 -0
- package/types/lib/managers/oci.d.ts +21 -0
- package/types/lib/managers/oci.d.ts.map +1 -0
- package/types/lib/managers/piptree.d.ts +13 -0
- package/types/lib/managers/piptree.d.ts.map +1 -0
- package/types/lib/parsers/cmakeCache.d.ts +70 -0
- package/types/lib/parsers/cmakeCache.d.ts.map +1 -0
- package/types/lib/parsers/gguf.d.ts +39 -0
- package/types/lib/parsers/gguf.d.ts.map +1 -0
- package/types/lib/parsers/gitAiNotes.d.ts +15 -0
- package/types/lib/parsers/gitAiNotes.d.ts.map +1 -0
- package/types/lib/parsers/gitmodules.d.ts +88 -0
- package/types/lib/parsers/gitmodules.d.ts.map +1 -0
- package/types/lib/parsers/htmlExtract.d.ts +34 -0
- package/types/lib/parsers/htmlExtract.d.ts.map +1 -0
- package/types/lib/parsers/huggingfaceManifest.d.ts +153 -0
- package/types/lib/parsers/huggingfaceManifest.d.ts.map +1 -0
- package/types/lib/parsers/huggingfaceUtils.d.ts +155 -0
- package/types/lib/parsers/huggingfaceUtils.d.ts.map +1 -0
- package/types/lib/parsers/iri.d.ts +68 -0
- package/types/lib/parsers/iri.d.ts.map +1 -0
- package/types/lib/parsers/npmrc.d.ts +33 -0
- package/types/lib/parsers/npmrc.d.ts.map +1 -0
- package/types/lib/parsers/ollama.d.ts +22 -0
- package/types/lib/parsers/ollama.d.ts.map +1 -0
- package/types/lib/parsers/xml.d.ts +47 -0
- package/types/lib/parsers/xml.d.ts.map +1 -0
- package/types/lib/server/server.d.ts +51 -0
- package/types/lib/server/server.d.ts.map +1 -0
- package/types/lib/stages/postgen/annotator.d.ts +36 -0
- package/types/lib/stages/postgen/annotator.d.ts.map +1 -0
- package/types/lib/stages/postgen/auditBom.d.ts +92 -0
- package/types/lib/stages/postgen/auditBom.d.ts.map +1 -0
- package/types/lib/stages/postgen/postgen.d.ts +59 -0
- package/types/lib/stages/postgen/postgen.d.ts.map +1 -0
- package/types/lib/stages/postgen/ruleEngine.d.ts +18 -0
- package/types/lib/stages/postgen/ruleEngine.d.ts.map +1 -0
- package/types/lib/stages/postgen/sortBom.d.ts +34 -0
- package/types/lib/stages/postgen/sortBom.d.ts.map +1 -0
- package/types/lib/stages/postgen/spdxConverter.d.ts +11 -0
- package/types/lib/stages/postgen/spdxConverter.d.ts.map +1 -0
- package/types/lib/stages/postgen/specVersionCompat.d.ts +71 -0
- package/types/lib/stages/postgen/specVersionCompat.d.ts.map +1 -0
- package/types/lib/stages/pregen/envAudit.d.ts +14 -0
- package/types/lib/stages/pregen/envAudit.d.ts.map +1 -0
- package/types/lib/stages/pregen/pregen.d.ts +59 -0
- package/types/lib/stages/pregen/pregen.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/arborist/index.d.ts +47 -0
- package/types/lib/third-party/arborist/lib/arborist/index.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/arborist/load-actual.d.ts +4 -0
- package/types/lib/third-party/arborist/lib/arborist/load-actual.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/arborist/load-virtual.d.ts +4 -0
- package/types/lib/third-party/arborist/lib/arborist/load-virtual.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/bin-links.d.ts +18 -0
- package/types/lib/third-party/arborist/lib/bin-links.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/calc-dep-flags.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/calc-dep-flags.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/case-insensitive-map.d.ts +9 -0
- package/types/lib/third-party/arborist/lib/case-insensitive-map.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/consistent-resolve.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/consistent-resolve.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/debug.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/debug.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/dep-valid.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/dep-valid.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/edge.d.ts +46 -0
- package/types/lib/third-party/arborist/lib/edge.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/from-path.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/from-path.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/gather-dep-set.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/gather-dep-set.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/index.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/index.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/inventory.d.ts +14 -0
- package/types/lib/third-party/arborist/lib/inventory.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/link.d.ts +18 -0
- package/types/lib/third-party/arborist/lib/link.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/node.d.ts +112 -0
- package/types/lib/third-party/arborist/lib/node.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/npm-extension.d.ts +18 -0
- package/types/lib/third-party/arborist/lib/npm-extension.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/override-resolves.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/override-resolves.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/override-set.d.ts +27 -0
- package/types/lib/third-party/arborist/lib/override-set.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/package-extensions.d.ts +36 -0
- package/types/lib/third-party/arborist/lib/package-extensions.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/printable.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/printable.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/proc-log.d.ts +20 -0
- package/types/lib/third-party/arborist/lib/proc-log.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/realpath.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/realpath.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/relpath.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/relpath.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/shrinkwrap.d.ts +54 -0
- package/types/lib/third-party/arborist/lib/shrinkwrap.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/spec-from-lock.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/spec-from-lock.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/tree-check.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/tree-check.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/validate-npm-package-name.d.ts +13 -0
- package/types/lib/third-party/arborist/lib/validate-npm-package-name.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/version-from-tgz.d.ts +6 -0
- package/types/lib/third-party/arborist/lib/version-from-tgz.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/yarn-lock.d.ts +35 -0
- package/types/lib/third-party/arborist/lib/yarn-lock.d.ts.map +1 -0
- package/types/lib/validator/bomValidator.d.ts +40 -0
- package/types/lib/validator/bomValidator.d.ts.map +1 -0
- package/types/lib/validator/complianceEngine.d.ts +72 -0
- package/types/lib/validator/complianceEngine.d.ts.map +1 -0
- package/types/lib/validator/complianceRules.d.ts +61 -0
- package/types/lib/validator/complianceRules.d.ts.map +1 -0
- package/types/lib/validator/index.d.ts +101 -0
- package/types/lib/validator/index.d.ts.map +1 -0
- package/types/lib/validator/reporters/annotations.d.ts +37 -0
- package/types/lib/validator/reporters/annotations.d.ts.map +1 -0
- package/types/lib/validator/reporters/console.d.ts +34 -0
- package/types/lib/validator/reporters/console.d.ts.map +1 -0
- package/types/lib/validator/reporters/index.d.ts +30 -0
- package/types/lib/validator/reporters/index.d.ts.map +1 -0
- package/types/lib/validator/reporters/json.d.ts +11 -0
- package/types/lib/validator/reporters/json.d.ts.map +1 -0
- package/types/lib/validator/reporters/sarif.d.ts +22 -0
- package/types/lib/validator/reporters/sarif.d.ts.map +1 -0
- package/mod.d.ts +0 -7
- package/mod.js +0 -22
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Ubuntu / Debian codename map and RHEL display-name aliases.
|
|
6
|
+
* Keep this list updated every year.
|
|
7
|
+
*/
|
|
8
|
+
export const OS_DISTRO_ALIAS = {
|
|
9
|
+
"ubuntu-4.10": "warty",
|
|
10
|
+
"ubuntu-5.04": "hoary",
|
|
11
|
+
"ubuntu-5.10": "breezy",
|
|
12
|
+
"ubuntu-6.06": "dapper",
|
|
13
|
+
"ubuntu-6.10": "edgy",
|
|
14
|
+
"ubuntu-7.04": "feisty",
|
|
15
|
+
"ubuntu-7.10": "gutsy",
|
|
16
|
+
"ubuntu-8.04": "hardy",
|
|
17
|
+
"ubuntu-8.10": "intrepid",
|
|
18
|
+
"ubuntu-9.04": "jaunty",
|
|
19
|
+
"ubuntu-9.10": "karmic",
|
|
20
|
+
"ubuntu-10.04": "lucid",
|
|
21
|
+
"ubuntu-10.10": "maverick",
|
|
22
|
+
"ubuntu-11.04": "natty",
|
|
23
|
+
"ubuntu-11.10": "oneiric",
|
|
24
|
+
"ubuntu-12.04": "precise",
|
|
25
|
+
"ubuntu-12.10": "quantal",
|
|
26
|
+
"ubuntu-13.04": "raring",
|
|
27
|
+
"ubuntu-13.10": "saucy",
|
|
28
|
+
"ubuntu-14.04": "trusty",
|
|
29
|
+
"ubuntu-14.10": "utopic",
|
|
30
|
+
"ubuntu-15.04": "vivid",
|
|
31
|
+
"ubuntu-15.10": "wily",
|
|
32
|
+
"ubuntu-16.04": "xenial",
|
|
33
|
+
"ubuntu-16.10": "yakkety",
|
|
34
|
+
"ubuntu-17.04": "zesty",
|
|
35
|
+
"ubuntu-17.10": "artful",
|
|
36
|
+
"ubuntu-18.04": "bionic",
|
|
37
|
+
"ubuntu-18.10": "cosmic",
|
|
38
|
+
"ubuntu-19.04": "disco",
|
|
39
|
+
"ubuntu-19.10": "eoan",
|
|
40
|
+
"ubuntu-20.04": "focal",
|
|
41
|
+
"ubuntu-20.10": "groovy",
|
|
42
|
+
"ubuntu-21.04": "hirsute",
|
|
43
|
+
"ubuntu-21.10": "impish",
|
|
44
|
+
"ubuntu-22.04": "jammy",
|
|
45
|
+
"ubuntu-22.10": "kinetic",
|
|
46
|
+
"ubuntu-23.04": "lunar",
|
|
47
|
+
"ubuntu-23.10": "mantic",
|
|
48
|
+
"ubuntu-24.04": "noble",
|
|
49
|
+
"ubuntu-24.10": "oracular",
|
|
50
|
+
"ubuntu-25.04": "plucky",
|
|
51
|
+
"ubuntu-25.10": "questing",
|
|
52
|
+
"debian-15": "duke",
|
|
53
|
+
"debian-14": "forky",
|
|
54
|
+
"debian-14.5": "forky",
|
|
55
|
+
"debian-13": "trixie",
|
|
56
|
+
"debian-13.5": "trixie",
|
|
57
|
+
"debian-12": "bookworm",
|
|
58
|
+
"debian-12.5": "bookworm",
|
|
59
|
+
"debian-12.6": "bookworm",
|
|
60
|
+
"debian-11": "bullseye",
|
|
61
|
+
"debian-11.5": "bullseye",
|
|
62
|
+
"debian-10": "buster",
|
|
63
|
+
"debian-10.5": "buster",
|
|
64
|
+
"debian-9": "stretch",
|
|
65
|
+
"debian-9.5": "stretch",
|
|
66
|
+
"debian-8": "jessie",
|
|
67
|
+
"debian-8.5": "jessie",
|
|
68
|
+
"debian-7": "wheezy",
|
|
69
|
+
"debian-7.5": "wheezy",
|
|
70
|
+
"debian-6": "squeeze",
|
|
71
|
+
"debian-5": "lenny",
|
|
72
|
+
"debian-4": "etch",
|
|
73
|
+
"debian-3.1": "sarge",
|
|
74
|
+
"debian-3": "woody",
|
|
75
|
+
"debian-2.2": "potato",
|
|
76
|
+
"debian-2.1": "slink",
|
|
77
|
+
"debian-2": "hamm",
|
|
78
|
+
"debian-1.3": "bo",
|
|
79
|
+
"debian-1.2": "rex",
|
|
80
|
+
"debian-1.1": "buzz",
|
|
81
|
+
"red hat enterprise linux": "rhel",
|
|
82
|
+
"red hat enterprise linux 6": "rhel-6",
|
|
83
|
+
"red hat enterprise linux 7": "rhel-7",
|
|
84
|
+
"red hat enterprise linux 8": "rhel-8",
|
|
85
|
+
"red hat enterprise linux 9": "rhel-9",
|
|
86
|
+
"red hat enterprise linux 10": "rhel-10",
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Canonical purl namespace for distro vendors that are published under more
|
|
91
|
+
* than one spelling. Both the os-release path (`getDistroInfo`) and the trivy
|
|
92
|
+
* passthrough in `lib/managers/binary.js` route through this single map so the
|
|
93
|
+
* two paths cannot drift apart again.
|
|
94
|
+
*
|
|
95
|
+
* Azure Linux 2.0 is CBL-Mariner 2.0 — Microsoft renamed the product — and the
|
|
96
|
+
* OSV feed publishes `pkg:rpm/azure-linux/<name>` for every generation
|
|
97
|
+
* (ecosystems "Azure Linux:2" and "Azure Linux:3"), so the historical
|
|
98
|
+
* spellings azurelinux, cbl-mariner and mariner all canonicalise to
|
|
99
|
+
* "azure-linux". rhel/ol/amzn/opensuse-* are the cases previously inlined in
|
|
100
|
+
* getDistroInfo(); alma/rocky-linux were previously inlined in binary.js.
|
|
101
|
+
*
|
|
102
|
+
* Amazon Linux canonicalises to "amazon", the spelling the vulnerability feeds
|
|
103
|
+
* publish (AppThreat vuln-list `amazon`): the os-release ID is `amzn` and
|
|
104
|
+
* trivy emits `amazon`, and the previous `amazonlinux` mapping here matched
|
|
105
|
+
* neither, so live-host Amazon Linux purls matched nothing at all.
|
|
106
|
+
*/
|
|
107
|
+
export const OS_NAMESPACE_ALIAS = {
|
|
108
|
+
alma: "almalinux",
|
|
109
|
+
amazonlinux: "amazon",
|
|
110
|
+
amzn: "amazon",
|
|
111
|
+
azurelinux: "azure-linux",
|
|
112
|
+
"cbl-mariner": "azure-linux",
|
|
113
|
+
mariner: "azure-linux",
|
|
114
|
+
ol: "oracle",
|
|
115
|
+
"opensuse-leap": "opensuse",
|
|
116
|
+
"opensuse-tumbleweed": "opensuse",
|
|
117
|
+
rhel: "redhat",
|
|
118
|
+
"rocky-linux": "rocky",
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Vendor prefixes that `distro` qualifier values are canonicalised for, so one
|
|
123
|
+
* release has exactly one qualifier value no matter which side produced it.
|
|
124
|
+
*
|
|
125
|
+
* trivy stamps the qualifier from its own distro table while cdxgen stamps it
|
|
126
|
+
* from os-release, and the two disagree: an Oracle Linux 9.8 image came out
|
|
127
|
+
* with `oracle-9.8` on 99 components and `ol-9.8` on 43, and a RHEL 9.8 image
|
|
128
|
+
* with namespace `redhat` but qualifier `rhel-9.8`. Canonicalising both sides
|
|
129
|
+
* through this map collapses each release onto the vendor its purl namespace
|
|
130
|
+
* already uses.
|
|
131
|
+
*
|
|
132
|
+
* SUSE is deliberately absent. `sles-15.6`, `opensuse-leap-15.6` and
|
|
133
|
+
* `opensuse-tumbleweed-<snapshot>` are the values consumers derive the release
|
|
134
|
+
* channel from (vulnerability-db maps them to per-release channels), and both
|
|
135
|
+
* sides already agree on them; folding Leap and Tumbleweed onto a bare
|
|
136
|
+
* `opensuse-` vendor would destroy exactly the distinction that matters.
|
|
137
|
+
*
|
|
138
|
+
* Keys are matched longest-first so `cbl-mariner-2.0` resolves against the
|
|
139
|
+
* full vendor segment rather than a shorter prefix.
|
|
140
|
+
*/
|
|
141
|
+
export const OS_DISTRO_QUALIFIER_ALIAS = {
|
|
142
|
+
alma: "almalinux",
|
|
143
|
+
amazonlinux: "amazon",
|
|
144
|
+
amzn: "amazon",
|
|
145
|
+
azurelinux: "azure-linux",
|
|
146
|
+
"cbl-mariner": "azure-linux",
|
|
147
|
+
mariner: "azure-linux",
|
|
148
|
+
ol: "oracle",
|
|
149
|
+
rhel: "redhat",
|
|
150
|
+
"rocky-linux": "rocky",
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
// A distro qualifier reaches a purl verbatim, so anything outside the purl
|
|
154
|
+
// qualifier charset makes the whole purl — and with it the whole BOM —
|
|
155
|
+
// invalid. trivy emits Amazon Linux as
|
|
156
|
+
// `amazon-2023.12.20260727+(Amazon Linux)`, which failed cdxgen's own schema
|
|
157
|
+
// validation and cost the entire SBOM.
|
|
158
|
+
const SAFE_DISTRO_QUALIFIER = /^[A-Za-z0-9._-]+$/;
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Whether a `distro` qualifier value is safe to place in a purl unencoded.
|
|
162
|
+
*
|
|
163
|
+
* @param {string} qualifier - distro qualifier value
|
|
164
|
+
* @returns {boolean} true when the value contains only purl-safe characters
|
|
165
|
+
*/
|
|
166
|
+
export function isCleanDistroQualifier(qualifier) {
|
|
167
|
+
return !!qualifier && SAFE_DISTRO_QUALIFIER.test(qualifier);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const OS_DISTRO_QUALIFIER_ALIAS_KEYS = Object.keys(
|
|
171
|
+
OS_DISTRO_QUALIFIER_ALIAS,
|
|
172
|
+
).sort((a, b) => b.length - a.length);
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Canonicalise the vendor prefix of a `distro` qualifier value
|
|
176
|
+
* (e.g. "cbl-mariner-2.0" or "mariner-2.0" -> "azure-linux-2.0") so a release
|
|
177
|
+
* has exactly one qualifier spelling regardless of which tool emitted it.
|
|
178
|
+
* Values without a known vendor prefix are returned unchanged.
|
|
179
|
+
*
|
|
180
|
+
* @param {string} qualifier - distro qualifier value such as "azurelinux-3.0"
|
|
181
|
+
* @returns {string} canonical qualifier value
|
|
182
|
+
*/
|
|
183
|
+
export function canonicalDistroQualifier(qualifier) {
|
|
184
|
+
if (!qualifier) {
|
|
185
|
+
return qualifier;
|
|
186
|
+
}
|
|
187
|
+
for (const key of OS_DISTRO_QUALIFIER_ALIAS_KEYS) {
|
|
188
|
+
if (qualifier.startsWith(`${key}-`)) {
|
|
189
|
+
return `${OS_DISTRO_QUALIFIER_ALIAS[key]}${qualifier.slice(key.length)}`;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return qualifier;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// ---------------------------------------------------------------------------
|
|
196
|
+
// Raw os-release cache — keyed by the osRelease file path so the live-host
|
|
197
|
+
// cache (/etc/os-release) and any container rootfs path are kept separate.
|
|
198
|
+
// ---------------------------------------------------------------------------
|
|
199
|
+
const _osReleaseCache = new Map();
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Parse an os-release file from an arbitrary root path and return a plain
|
|
203
|
+
* key→value object. Results are cached per root path so the file is read
|
|
204
|
+
* at most once per process per distinct root.
|
|
205
|
+
*
|
|
206
|
+
* @param {string} [root="/"] - Root of the filesystem to search (e.g. a
|
|
207
|
+
* container rootfs extracted to a temp directory, or "/" for the live host).
|
|
208
|
+
* @returns {Object} Raw key/value pairs from the os-release file.
|
|
209
|
+
*/
|
|
210
|
+
export function readOsRelease(root = "/") {
|
|
211
|
+
if (_osReleaseCache.has(root)) {
|
|
212
|
+
return _osReleaseCache.get(root);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// Candidate locations, in preference order
|
|
216
|
+
const candidates = [
|
|
217
|
+
join(root, "etc", "os-release"),
|
|
218
|
+
join(root, "usr", "lib", "os-release"),
|
|
219
|
+
];
|
|
220
|
+
|
|
221
|
+
const data = {};
|
|
222
|
+
for (const candidate of candidates) {
|
|
223
|
+
if (existsSync(candidate)) {
|
|
224
|
+
try {
|
|
225
|
+
const content = readFileSync(candidate, "utf-8");
|
|
226
|
+
for (const line of content.split("\n")) {
|
|
227
|
+
if (line.startsWith("#") || !line.includes("=")) {
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
const eqIdx = line.indexOf("=");
|
|
231
|
+
const key = line.substring(0, eqIdx).trim();
|
|
232
|
+
const raw = line.substring(eqIdx + 1).trim();
|
|
233
|
+
// Strip surrounding single or double quotes
|
|
234
|
+
data[key] = raw.replace(/^["']|["']$/g, "");
|
|
235
|
+
}
|
|
236
|
+
break; // Stop at the first readable file
|
|
237
|
+
} catch (_e) {
|
|
238
|
+
// Try the next candidate
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
_osReleaseCache.set(root, data);
|
|
244
|
+
return data;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// Exported only for unit tests — resets the per-root cache.
|
|
248
|
+
/**
|
|
249
|
+
* Reset the per-root os-release cache. Exported for unit tests only.
|
|
250
|
+
*/
|
|
251
|
+
export function _resetOsReleaseCache() {
|
|
252
|
+
_osReleaseCache.clear();
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Derive structured distro information from an os-release file.
|
|
257
|
+
*
|
|
258
|
+
* Returns an object with:
|
|
259
|
+
* - purlType {string} "deb" | "apk" | "rpm"
|
|
260
|
+
* - namespace {string} canonical purl namespace (e.g. "ubuntu", "alpine",
|
|
261
|
+
* "azure-linux" for both Azure Linux and CBL-Mariner)
|
|
262
|
+
* - distroId {string} ID + "-" + VERSION_ID with a canonical vendor
|
|
263
|
+
* prefix (e.g. "ubuntu-22.04", "azure-linux-3.0")
|
|
264
|
+
* - distroName {string} codename/alias (e.g. "jammy")
|
|
265
|
+
*
|
|
266
|
+
* Mirrors the logic in lib/managers/binary.js getOSPackages() so that both
|
|
267
|
+
* callers share a single implementation.
|
|
268
|
+
*
|
|
269
|
+
* @param {string} [root="/"] - Filesystem root to look for os-release.
|
|
270
|
+
* @returns {{ purlType: string, namespace: string, distroId: string, distroName: string }}
|
|
271
|
+
*/
|
|
272
|
+
export function getDistroInfo(root = "/") {
|
|
273
|
+
const info = readOsRelease(root);
|
|
274
|
+
|
|
275
|
+
const rawId = (info.ID || "").toLowerCase();
|
|
276
|
+
const idLike = (info.ID_LIKE || "").toLowerCase();
|
|
277
|
+
const versionId = info.VERSION_ID || "";
|
|
278
|
+
|
|
279
|
+
// Determine the purl type
|
|
280
|
+
let purlType = "rpm"; // safe default for unknown Linux
|
|
281
|
+
switch (rawId) {
|
|
282
|
+
case "debian":
|
|
283
|
+
case "ubuntu":
|
|
284
|
+
case "pop":
|
|
285
|
+
case "kali":
|
|
286
|
+
case "raspbian":
|
|
287
|
+
case "linuxmint":
|
|
288
|
+
purlType = "deb";
|
|
289
|
+
break;
|
|
290
|
+
case "alpine":
|
|
291
|
+
case "openwrt":
|
|
292
|
+
purlType = "apk";
|
|
293
|
+
break;
|
|
294
|
+
case "sles":
|
|
295
|
+
case "suse":
|
|
296
|
+
case "opensuse":
|
|
297
|
+
case "opensuse-leap":
|
|
298
|
+
case "opensuse-tumbleweed":
|
|
299
|
+
case "fedora":
|
|
300
|
+
case "rhel":
|
|
301
|
+
case "centos":
|
|
302
|
+
case "rocky":
|
|
303
|
+
case "almalinux":
|
|
304
|
+
case "azurelinux":
|
|
305
|
+
case "cbl-mariner":
|
|
306
|
+
case "mariner":
|
|
307
|
+
case "oracle":
|
|
308
|
+
case "ol":
|
|
309
|
+
case "amzn":
|
|
310
|
+
case "mageia":
|
|
311
|
+
case "photon":
|
|
312
|
+
purlType = "rpm";
|
|
313
|
+
break;
|
|
314
|
+
default:
|
|
315
|
+
if (idLike.includes("debian") || idLike.includes("ubuntu")) {
|
|
316
|
+
purlType = "deb";
|
|
317
|
+
} else if (idLike.includes("alpine")) {
|
|
318
|
+
purlType = "apk";
|
|
319
|
+
} else if (
|
|
320
|
+
idLike.includes("rhel") ||
|
|
321
|
+
idLike.includes("centos") ||
|
|
322
|
+
idLike.includes("fedora") ||
|
|
323
|
+
idLike.includes("suse")
|
|
324
|
+
) {
|
|
325
|
+
purlType = "rpm";
|
|
326
|
+
}
|
|
327
|
+
break;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
// Determine the purl namespace (vendor), canonicalising vendors that are
|
|
331
|
+
// published under several spellings (e.g. mariner -> azure-linux)
|
|
332
|
+
let namespace = OS_NAMESPACE_ALIAS[rawId] || rawId;
|
|
333
|
+
if (!rawId) {
|
|
334
|
+
// Fallback via ID_LIKE
|
|
335
|
+
if (idLike.includes("rhel") || idLike.includes("centos")) {
|
|
336
|
+
namespace = "redhat";
|
|
337
|
+
} else if (idLike.includes("fedora")) {
|
|
338
|
+
namespace = "fedora";
|
|
339
|
+
} else if (idLike.includes("suse")) {
|
|
340
|
+
namespace = "opensuse";
|
|
341
|
+
} else if (idLike.includes("debian")) {
|
|
342
|
+
namespace = "debian";
|
|
343
|
+
} else if (idLike.includes("ubuntu")) {
|
|
344
|
+
namespace = "ubuntu";
|
|
345
|
+
} else {
|
|
346
|
+
namespace = "linux";
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// Build distroId = ID-VERSION_ID (e.g. "fedora-25", "alpine-3.17"),
|
|
351
|
+
// canonicalising the vendor prefix so one release has a single qualifier
|
|
352
|
+
// value (e.g. "mariner-2.0" and "azurelinux-3.0" -> "azure-linux-2.0"/
|
|
353
|
+
// "azure-linux-3.0")
|
|
354
|
+
let distroId = versionId ? `${rawId}-${versionId}` : rawId;
|
|
355
|
+
distroId = canonicalDistroQualifier(distroId);
|
|
356
|
+
|
|
357
|
+
// Special-case Alpine: truncate to major.minor
|
|
358
|
+
if (purlType === "apk" && versionId) {
|
|
359
|
+
const parts = versionId.split(".");
|
|
360
|
+
if (parts.length >= 2) {
|
|
361
|
+
distroId = `${rawId}-${parts[0]}.${parts[1]}`;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
// Determine codename / alias
|
|
366
|
+
let distroName =
|
|
367
|
+
info.VERSION_CODENAME ||
|
|
368
|
+
info.CENTOS_MANTISBT_PROJECT ||
|
|
369
|
+
info.REDHAT_BUGZILLA_PRODUCT ||
|
|
370
|
+
info.REDHAT_SUPPORT_PRODUCT ||
|
|
371
|
+
"";
|
|
372
|
+
distroName = distroName.toLowerCase();
|
|
373
|
+
|
|
374
|
+
// Resolve well-known display name aliases
|
|
375
|
+
if (distroName.includes(" ") && OS_DISTRO_ALIAS[distroName]) {
|
|
376
|
+
distroName = OS_DISTRO_ALIAS[distroName];
|
|
377
|
+
}
|
|
378
|
+
if (!distroName && OS_DISTRO_ALIAS[distroId]) {
|
|
379
|
+
distroName = OS_DISTRO_ALIAS[distroId];
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
return { purlType, namespace, distroId, distroName };
|
|
383
|
+
}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { getDistroInfo } from "./osinfo.js";
|
|
2
|
+
import { tryBuildPurl } from "./purl.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Derive a version value from an osquery result row.
|
|
6
|
+
*
|
|
7
|
+
* Falls back through alternate row fields (e.g. `hotfix_id`, `port`, `pid`)
|
|
8
|
+
* that carry version-like values for the given query category.
|
|
9
|
+
*
|
|
10
|
+
* @param {Object} res osquery result row
|
|
11
|
+
* @returns {string|undefined} First present version-like field value
|
|
12
|
+
*/
|
|
13
|
+
export function deriveOsQueryVersion(res) {
|
|
14
|
+
return (
|
|
15
|
+
res.version ||
|
|
16
|
+
res.hotfix_id ||
|
|
17
|
+
res.hardware_version ||
|
|
18
|
+
res.port ||
|
|
19
|
+
res.pid ||
|
|
20
|
+
res.subject_key_id ||
|
|
21
|
+
res.interface ||
|
|
22
|
+
res.instance_id
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Derive a name value from an osquery result row.
|
|
28
|
+
*
|
|
29
|
+
* @param {Object} res osquery result row
|
|
30
|
+
* @param {boolean} singleResult Whether the query returned exactly one row
|
|
31
|
+
* @param {string} queryName Query name used as a fallback name for single-result queries
|
|
32
|
+
* @returns {string|undefined} First present name-like field value
|
|
33
|
+
*/
|
|
34
|
+
export function deriveOsQueryName(res, singleResult, queryName) {
|
|
35
|
+
let name =
|
|
36
|
+
res.name ||
|
|
37
|
+
res.device_id ||
|
|
38
|
+
res.hotfix_id ||
|
|
39
|
+
res.uuid ||
|
|
40
|
+
res.serial ||
|
|
41
|
+
res.pid ||
|
|
42
|
+
res.address ||
|
|
43
|
+
res.ami_id ||
|
|
44
|
+
res.interface ||
|
|
45
|
+
res.client_app_id;
|
|
46
|
+
if (!name && singleResult && queryName) {
|
|
47
|
+
name = queryName;
|
|
48
|
+
}
|
|
49
|
+
return name;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Derive a publisher value from an osquery result row.
|
|
54
|
+
*
|
|
55
|
+
* @param {Object} res osquery result row
|
|
56
|
+
* @returns {string} Publisher-like value, or an empty string when absent or literal `"null"`
|
|
57
|
+
*/
|
|
58
|
+
export function deriveOsQueryPublisher(res) {
|
|
59
|
+
const publisher =
|
|
60
|
+
res.publisher ||
|
|
61
|
+
res.maintainer ||
|
|
62
|
+
res.creator ||
|
|
63
|
+
res.manufacturer ||
|
|
64
|
+
res.provider ||
|
|
65
|
+
"";
|
|
66
|
+
return publisher === "null" ? "" : publisher;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Derive a description value from an osquery result row.
|
|
71
|
+
*
|
|
72
|
+
* @param {Object} res osquery result row
|
|
73
|
+
* @returns {string} First present description-like field value, or an empty string
|
|
74
|
+
*/
|
|
75
|
+
export function deriveOsQueryDescription(res) {
|
|
76
|
+
return (
|
|
77
|
+
res.description ||
|
|
78
|
+
res.summary ||
|
|
79
|
+
res.arguments ||
|
|
80
|
+
res.device ||
|
|
81
|
+
res.codename ||
|
|
82
|
+
res.section ||
|
|
83
|
+
res.status ||
|
|
84
|
+
res.identifier ||
|
|
85
|
+
res.components ||
|
|
86
|
+
""
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Sanitize an identity string for use in component names and references.
|
|
92
|
+
*
|
|
93
|
+
* @param {string} value Raw identity value
|
|
94
|
+
* @returns {string} Value with spaces mapped to `+`, `:`/`%` mapped to `-`, and `@`/brace delimiters trimmed
|
|
95
|
+
*/
|
|
96
|
+
export function sanitizeOsQueryIdentity(value) {
|
|
97
|
+
return String(value || "")
|
|
98
|
+
.replace(/ /g, "+")
|
|
99
|
+
.replace(/[:%]/g, "-")
|
|
100
|
+
.replace(/^[@{]/g, "")
|
|
101
|
+
.replace(/[}]$/g, "");
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Sanitize a value for safe use inside a `bom-ref`.
|
|
106
|
+
*
|
|
107
|
+
* @param {string} value Raw value
|
|
108
|
+
* @param {string} [fallback="unknown"] Value returned when the input is empty or `"null"`
|
|
109
|
+
* @returns {string} Whitespace-collapsed value with bom-ref delimiters replaced by `-`
|
|
110
|
+
*/
|
|
111
|
+
export function sanitizeOsQueryBomRefValue(value, fallback = "unknown") {
|
|
112
|
+
const normalizedValue = String(value || "")
|
|
113
|
+
.replace(/[\r\n\t]+/g, " ")
|
|
114
|
+
.replace(/\s+/g, " ")
|
|
115
|
+
.trim();
|
|
116
|
+
if (!normalizedValue || normalizedValue === "null") {
|
|
117
|
+
return fallback;
|
|
118
|
+
}
|
|
119
|
+
return normalizedValue.replace(/[:@#\[\]=]/g, "-");
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Build a deterministic fallback `bom-ref` for an osquery-derived component.
|
|
124
|
+
*
|
|
125
|
+
* @param {string} queryCategory Osquery category (e.g. `deb_packages`)
|
|
126
|
+
* @param {string} componentType CycloneDX component type
|
|
127
|
+
* @param {string|undefined} name Component name
|
|
128
|
+
* @param {string|undefined} version Component version
|
|
129
|
+
* @param {string|undefined} identityField Row field used to distinguish the component's identity
|
|
130
|
+
* @param {string|undefined} identityValue Value of the identity field
|
|
131
|
+
* @returns {string} BOM ref of the form `osquery:<category>:<type>:<name>@<version>[<field>=<value>]`
|
|
132
|
+
*/
|
|
133
|
+
export function createOsQueryFallbackBomRef(
|
|
134
|
+
queryCategory,
|
|
135
|
+
componentType,
|
|
136
|
+
name,
|
|
137
|
+
version,
|
|
138
|
+
identityField,
|
|
139
|
+
identityValue,
|
|
140
|
+
) {
|
|
141
|
+
const categoryRef = sanitizeOsQueryBomRefValue(queryCategory, "component");
|
|
142
|
+
const componentTypeRef = sanitizeOsQueryBomRefValue(
|
|
143
|
+
componentType,
|
|
144
|
+
"component",
|
|
145
|
+
);
|
|
146
|
+
const nameRef = sanitizeOsQueryBomRefValue(
|
|
147
|
+
name || queryCategory,
|
|
148
|
+
"component",
|
|
149
|
+
);
|
|
150
|
+
const versionRef = sanitizeOsQueryBomRefValue(version, "unknown");
|
|
151
|
+
const baseBomRef = `osquery:${categoryRef}:${componentTypeRef}:${nameRef}@${versionRef}`;
|
|
152
|
+
if (!identityField || !identityValue) {
|
|
153
|
+
return baseBomRef;
|
|
154
|
+
}
|
|
155
|
+
const identityFieldRef = sanitizeOsQueryBomRefValue(
|
|
156
|
+
identityField,
|
|
157
|
+
"identity",
|
|
158
|
+
);
|
|
159
|
+
const identityValueRef = sanitizeOsQueryBomRefValue(identityValue, "unknown");
|
|
160
|
+
return `${baseBomRef}[${identityFieldRef}=${identityValueRef}]`;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Determine whether an osquery-derived component type may carry a purl.
|
|
165
|
+
*
|
|
166
|
+
* @param {string} componentType CycloneDX component type
|
|
167
|
+
* @returns {boolean} `false` for `cryptographic-asset`, `data`, `device`, and `information`
|
|
168
|
+
*/
|
|
169
|
+
export function shouldCreateOsQueryPurl(componentType) {
|
|
170
|
+
return !["cryptographic-asset", "data", "device", "information"].includes(
|
|
171
|
+
componentType || "",
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Purl types whose type rules require a namespace. For OS package types the
|
|
176
|
+
// namespace is the distro vendor (`pkg:deb/debian/...`, `pkg:rpm/redhat/...`),
|
|
177
|
+
// which osquery does not report but /etc/os-release does.
|
|
178
|
+
const NAMESPACE_REQUIRED_TYPES = new Set([
|
|
179
|
+
"deb",
|
|
180
|
+
"rpm",
|
|
181
|
+
"apk",
|
|
182
|
+
"alpm",
|
|
183
|
+
"ebuild",
|
|
184
|
+
]);
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Construct a purl string for an osquery-derived component.
|
|
188
|
+
*
|
|
189
|
+
* Builds through `tryBuildPurl`, so an invalid combination yields `null`
|
|
190
|
+
* instead of throwing. Derives a swid `tag_id` qualifier when missing and a
|
|
191
|
+
* distro namespace from `/etc/os-release` for OS package types that require one.
|
|
192
|
+
*
|
|
193
|
+
* @param {string} purlType Purl type (e.g. `deb`, `rpm`, `generic`)
|
|
194
|
+
* @param {string|null} group Purl namespace or group
|
|
195
|
+
* @param {string} name Component name
|
|
196
|
+
* @param {string} version Component version
|
|
197
|
+
* @param {Object|null} qualifiers Purl qualifiers
|
|
198
|
+
* @param {string|null} subpath Purl subpath (leading slashes are stripped)
|
|
199
|
+
* @returns {string|null} Canonical purl string, or `null` when the parts do not form a valid purl
|
|
200
|
+
*/
|
|
201
|
+
export function createOsQueryPurl(
|
|
202
|
+
purlType,
|
|
203
|
+
group,
|
|
204
|
+
name,
|
|
205
|
+
version,
|
|
206
|
+
qualifiers,
|
|
207
|
+
subpath,
|
|
208
|
+
) {
|
|
209
|
+
// cdx-purl rejects absolute subpaths; strip a leading slash so filesystem
|
|
210
|
+
// paths like /usr/lib/libcrypto.dylib become relative subpath segments.
|
|
211
|
+
const safeSubpath = subpath ? subpath.replace(/^\/+/, "") : null;
|
|
212
|
+
const type = purlType || "generic";
|
|
213
|
+
const finalQualifiers = { ...qualifiers };
|
|
214
|
+
// swid purls require a tag_id qualifier (ISO/IEC 19770-2). Auto-derive one
|
|
215
|
+
// from the component name when the caller did not provide one.
|
|
216
|
+
if (type === "swid" && !finalQualifiers.tag_id) {
|
|
217
|
+
finalQualifiers.tag_id = name;
|
|
218
|
+
}
|
|
219
|
+
// The Linux OS package queries (deb_packages, rpm_packages, portage) yield no
|
|
220
|
+
// group, but their purl types require a namespace. Derive the vendor from
|
|
221
|
+
// /etc/os-release the same way osPackageResolver does, so these keep a valid
|
|
222
|
+
// purl instead of losing one.
|
|
223
|
+
let namespace = group || null;
|
|
224
|
+
if (!namespace && NAMESPACE_REQUIRED_TYPES.has(type)) {
|
|
225
|
+
namespace = getDistroInfo().namespace || null;
|
|
226
|
+
}
|
|
227
|
+
// tryBuildPurl rather than build: a component that cannot be expressed as a
|
|
228
|
+
// valid purl must not abort the whole SBOM. Before this, an unknown distro on
|
|
229
|
+
// Linux threw E_REQUIRED_COMPONENT out of the middle of createCppBom.
|
|
230
|
+
return tryBuildPurl({
|
|
231
|
+
type,
|
|
232
|
+
namespace,
|
|
233
|
+
name: name,
|
|
234
|
+
version: version || null,
|
|
235
|
+
qualifiers: Object.keys(finalQualifiers).length ? finalQualifiers : null,
|
|
236
|
+
subpath: safeSubpath,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
function _deriveCertificateFormat(certificateFileExtension) {
|
|
241
|
+
switch ((certificateFileExtension || "").toLowerCase()) {
|
|
242
|
+
case "pem":
|
|
243
|
+
return "PEM";
|
|
244
|
+
case "der":
|
|
245
|
+
return "DER";
|
|
246
|
+
case "cer":
|
|
247
|
+
case "crt":
|
|
248
|
+
return "X.509";
|
|
249
|
+
default:
|
|
250
|
+
return undefined;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
function _normalizeCertificateDate(value) {
|
|
255
|
+
if (value === undefined || value === null || value === "") {
|
|
256
|
+
return undefined;
|
|
257
|
+
}
|
|
258
|
+
const stringValue = `${value}`.trim();
|
|
259
|
+
if (!stringValue) {
|
|
260
|
+
return undefined;
|
|
261
|
+
}
|
|
262
|
+
const numericValue = Number(stringValue);
|
|
263
|
+
if (Number.isFinite(numericValue)) {
|
|
264
|
+
const millis = stringValue.length > 10 ? numericValue : numericValue * 1000;
|
|
265
|
+
const parsedDate = new Date(millis);
|
|
266
|
+
return Number.isNaN(parsedDate.getTime())
|
|
267
|
+
? undefined
|
|
268
|
+
: parsedDate.toISOString();
|
|
269
|
+
}
|
|
270
|
+
const parsedDate = new Date(stringValue);
|
|
271
|
+
return Number.isNaN(parsedDate.getTime())
|
|
272
|
+
? undefined
|
|
273
|
+
: parsedDate.toISOString();
|
|
274
|
+
}
|