@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,601 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { basename, delimiter, join, resolve } from "node:path";
|
|
3
|
+
|
|
4
|
+
import { DEBUG_MODE } from "../core/activity.js";
|
|
5
|
+
import {
|
|
6
|
+
getTmpDir,
|
|
7
|
+
safeExistsSync,
|
|
8
|
+
safeMkdtempSync,
|
|
9
|
+
safeRmSync,
|
|
10
|
+
safeSpawnSync,
|
|
11
|
+
safeWriteSync,
|
|
12
|
+
} from "../core/fs.js";
|
|
13
|
+
import {
|
|
14
|
+
addDosaiSetValue,
|
|
15
|
+
buildDosaiPurlAliasMap,
|
|
16
|
+
dosaiSourceLocation,
|
|
17
|
+
dosaiSourceLocationFromNode,
|
|
18
|
+
resolveDosaiComponentPurl,
|
|
19
|
+
} from "./dosaiParsers.js";
|
|
20
|
+
import { resolvePluginBinary } from "./plugins.js";
|
|
21
|
+
|
|
22
|
+
const DOTNET_LANGUAGES = new Set([
|
|
23
|
+
"c#",
|
|
24
|
+
"csharp",
|
|
25
|
+
"cs",
|
|
26
|
+
"dotnet",
|
|
27
|
+
"dotnet-framework",
|
|
28
|
+
"f#",
|
|
29
|
+
"fsharp",
|
|
30
|
+
"fs",
|
|
31
|
+
"nuget",
|
|
32
|
+
"vb",
|
|
33
|
+
"vbnet",
|
|
34
|
+
"visualbasic",
|
|
35
|
+
]);
|
|
36
|
+
|
|
37
|
+
const DOSAI_COMMANDS = new Set(["crypto", "dataflows", "methods"]);
|
|
38
|
+
|
|
39
|
+
function dosaiBin() {
|
|
40
|
+
return resolvePluginBinary("dosai");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function frameFromDosaiNode(node) {
|
|
44
|
+
if (!node) {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
const fullFilename =
|
|
48
|
+
node.Path || node.FileName || node.CallLocation?.FileName;
|
|
49
|
+
if (!fullFilename || fullFilename === "<unknown>") {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
package: node.Namespace || "",
|
|
54
|
+
module: node.ClassName || node.Module || "",
|
|
55
|
+
function: node.MethodName || node.Name || node.CalledMethodName || "",
|
|
56
|
+
line: node.LineNumber || node.CallLocation?.LineNumber || undefined,
|
|
57
|
+
column: node.ColumnNumber || node.CallLocation?.ColumnNumber || undefined,
|
|
58
|
+
fullFilename,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function appendUniqueProperty(properties, name, value) {
|
|
63
|
+
if (value === undefined || value === null || value === "") {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (
|
|
67
|
+
!properties.some(
|
|
68
|
+
(property) => property.name === name && property.value === String(value),
|
|
69
|
+
)
|
|
70
|
+
) {
|
|
71
|
+
properties.push({ name, value: String(value) });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function sanitizeEndpoint(endpoint) {
|
|
76
|
+
const value = String(endpoint || "").trim();
|
|
77
|
+
if (!value) {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
if (/^https?:\/\//i.test(value)) {
|
|
81
|
+
try {
|
|
82
|
+
const parsedUrl = new URL(value);
|
|
83
|
+
parsedUrl.username = "";
|
|
84
|
+
parsedUrl.password = "";
|
|
85
|
+
parsedUrl.search = "";
|
|
86
|
+
parsedUrl.hash = "";
|
|
87
|
+
return parsedUrl.toString();
|
|
88
|
+
} catch (_err) {
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const routePath = value.split("?")[0].split("#")[0].slice(0, 512);
|
|
93
|
+
// ASP.NET route templates carry `[controller]` tokens and `{id}` parameters.
|
|
94
|
+
// CycloneDX types `services[].endpoints[]` as an iri-reference, where square
|
|
95
|
+
// brackets are reserved for IPv6 literals and braces are excluded outright,
|
|
96
|
+
// so the template is percent-encoded before it reaches the BOM.
|
|
97
|
+
const encodedPath = routePath.replace(
|
|
98
|
+
/[[\]{}]/g,
|
|
99
|
+
(character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`,
|
|
100
|
+
);
|
|
101
|
+
return encodedPath;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function serviceNameFromEndpoint(endpoint) {
|
|
105
|
+
const className = endpoint.ClassName || endpoint.FileName || "dotnet";
|
|
106
|
+
const methodName = endpoint.MethodName || endpoint.HttpMethod || "endpoint";
|
|
107
|
+
return `dosai-${className}-${methodName}-service`
|
|
108
|
+
.replace(/[^A-Za-z0-9_.-]+/g, "-")
|
|
109
|
+
.replace(/-+/g, "-");
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function dosaiSdkMessage(result) {
|
|
113
|
+
return (
|
|
114
|
+
result?.stdout?.includes(
|
|
115
|
+
"You must install or update .NET to run this application",
|
|
116
|
+
) ||
|
|
117
|
+
result?.stderr?.includes(
|
|
118
|
+
"You must install or update .NET to run this application",
|
|
119
|
+
)
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function safeDosaiPath(value) {
|
|
124
|
+
if (!value || typeof value !== "string" || /[\0\r\n]/.test(value)) {
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
return resolve(value);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function safeDosaiPatternPacks(value) {
|
|
131
|
+
if (!value || typeof value !== "string" || /[\0\r\n]/.test(value)) {
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
return value
|
|
135
|
+
.split(delimiter)
|
|
136
|
+
.map((patternPack) => safeDosaiPath(patternPack.trim()))
|
|
137
|
+
.filter(Boolean)
|
|
138
|
+
.join(delimiter);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function safeDosaiExecutable(value) {
|
|
142
|
+
if (!value || typeof value !== "string" || /[\0\r\n]/.test(value)) {
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
return value.trim();
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Check whether a language is a .NET language supported by dosai analysis.
|
|
150
|
+
*
|
|
151
|
+
* @param {string} language Project type or language name
|
|
152
|
+
* @returns {boolean} True when the language maps to a supported .NET/dotnet identifier
|
|
153
|
+
*/
|
|
154
|
+
export function isDosaiDotnetLanguage(language) {
|
|
155
|
+
return DOTNET_LANGUAGES.has(String(language || "").toLowerCase());
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Read and parse a dosai JSON output file.
|
|
160
|
+
*
|
|
161
|
+
* @param {string} jsonFile Path to the dosai JSON file
|
|
162
|
+
* @returns {Object|undefined} Parsed JSON content, or undefined when missing or invalid
|
|
163
|
+
*/
|
|
164
|
+
export function readDosaiJsonFile(jsonFile) {
|
|
165
|
+
if (!jsonFile || !safeExistsSync(jsonFile)) {
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
168
|
+
try {
|
|
169
|
+
return JSON.parse(readFileSync(jsonFile, "utf-8"));
|
|
170
|
+
} catch (_err) {
|
|
171
|
+
return undefined;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Run a dosai subcommand ("methods", "dataflows", or "crypto") against a source
|
|
177
|
+
* tree and write its JSON output to the given file.
|
|
178
|
+
*
|
|
179
|
+
* @param {string} command Dosai subcommand to execute
|
|
180
|
+
* @param {string} src Source directory to analyze
|
|
181
|
+
* @param {string} outputFile Path where the dosai JSON output is written
|
|
182
|
+
* @param {Object} [options] Options carrying dosaiCommand, dataFlowPatterns, or patternPacks overrides
|
|
183
|
+
* @returns {boolean} True when the command succeeded and produced the output file, false otherwise
|
|
184
|
+
*/
|
|
185
|
+
export function runDosaiCommand(command, src, outputFile, options = {}) {
|
|
186
|
+
if (!DOSAI_COMMANDS.has(command)) {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
const executable = safeDosaiExecutable(options.dosaiCommand || dosaiBin());
|
|
190
|
+
const srcPath = safeDosaiPath(src);
|
|
191
|
+
const outputPath = safeDosaiPath(outputFile);
|
|
192
|
+
if (!executable || !srcPath || !outputPath) {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
const args = [command, "--path", srcPath, "--o", outputPath];
|
|
196
|
+
if (command === "dataflows") {
|
|
197
|
+
if (options.dataFlowPatterns) {
|
|
198
|
+
const patternsPath = safeDosaiPath(options.dataFlowPatterns);
|
|
199
|
+
if (patternsPath) {
|
|
200
|
+
args.push("--patterns", patternsPath);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (options.dataFlowPatternPacks || options.patternPacks) {
|
|
204
|
+
const patternPacks = safeDosaiPatternPacks(
|
|
205
|
+
options.dataFlowPatternPacks || options.patternPacks,
|
|
206
|
+
);
|
|
207
|
+
if (patternPacks) {
|
|
208
|
+
args.push("--pattern-packs", patternPacks);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
} else if (command === "crypto") {
|
|
212
|
+
args.push("--format", "dosai");
|
|
213
|
+
}
|
|
214
|
+
if (DEBUG_MODE) {
|
|
215
|
+
console.log("Executing", executable, args.join(" "));
|
|
216
|
+
}
|
|
217
|
+
const result = safeSpawnSync(executable, args, {
|
|
218
|
+
cwd: srcPath,
|
|
219
|
+
shell: false,
|
|
220
|
+
});
|
|
221
|
+
if (dosaiSdkMessage(result)) {
|
|
222
|
+
console.log(
|
|
223
|
+
"Dotnet SDK is not installed. Please use the cdxgen dotnet container images to analyze this project with dosai.",
|
|
224
|
+
);
|
|
225
|
+
console.log(
|
|
226
|
+
"Alternatively, download the dosai self-contained binary (-full suffix) from https://github.com/owasp-dep-scan/dosai/releases and set DOSAI_CMD to its location.",
|
|
227
|
+
);
|
|
228
|
+
}
|
|
229
|
+
if (result?.status !== 0 || result?.error || !safeExistsSync(outputPath)) {
|
|
230
|
+
if (DEBUG_MODE) {
|
|
231
|
+
if (result?.stderr || result?.stdout) {
|
|
232
|
+
console.error(result.stdout, result.stderr);
|
|
233
|
+
} else {
|
|
234
|
+
console.log("Check if the dosai plugin was installed successfully.");
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
return true;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Produce the dosai methods (call graph) slice for a source tree.
|
|
244
|
+
*
|
|
245
|
+
* @param {string} src Source directory to analyze
|
|
246
|
+
* @param {string} outputFile Path where the methods slice JSON is written
|
|
247
|
+
* @param {Object} [options] Options forwarded to runDosaiCommand
|
|
248
|
+
* @returns {boolean} True when the slice was produced successfully
|
|
249
|
+
*/
|
|
250
|
+
export function createDosaiMethodsSlice(src, outputFile, options = {}) {
|
|
251
|
+
return runDosaiCommand("methods", src, outputFile, options);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Produce the dosai data-flow slice for a source tree.
|
|
256
|
+
*
|
|
257
|
+
* @param {string} src Source directory to analyze
|
|
258
|
+
* @param {string} outputFile Path where the data-flow slice JSON is written
|
|
259
|
+
* @param {Object} [options] Options carrying dataFlowPatterns or patternPacks overrides
|
|
260
|
+
* @returns {boolean} True when the slice was produced successfully
|
|
261
|
+
*/
|
|
262
|
+
export function createDosaiDataFlowSlice(src, outputFile, options = {}) {
|
|
263
|
+
return runDosaiCommand("dataflows", src, outputFile, options);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Produce the dosai crypto analysis output for a source tree.
|
|
268
|
+
*
|
|
269
|
+
* @param {string} src Source directory to analyze
|
|
270
|
+
* @param {string} outputFile Path where the crypto analysis JSON is written
|
|
271
|
+
* @param {Object} [options] Options forwarded to runDosaiCommand
|
|
272
|
+
* @returns {boolean} True when the analysis was produced successfully
|
|
273
|
+
*/
|
|
274
|
+
export function createDosaiCryptoAnalysis(src, outputFile, options = {}) {
|
|
275
|
+
return runDosaiCommand("crypto", src, outputFile, options);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Run dosai crypto analysis in a temporary directory and return the parsed result.
|
|
280
|
+
*
|
|
281
|
+
* @param {string} src Source directory to analyze
|
|
282
|
+
* @param {Object} [options] Options forwarded to createDosaiCryptoAnalysis
|
|
283
|
+
* @returns {Object|undefined} Parsed crypto analysis JSON, or undefined when the analysis fails
|
|
284
|
+
*/
|
|
285
|
+
export function analyzeDosaiCrypto(src, options = {}) {
|
|
286
|
+
const tempDir = safeMkdtempSync(join(getTmpDir(), "dosai-crypto-"));
|
|
287
|
+
const outputFile = join(tempDir, "dosai-crypto.json");
|
|
288
|
+
try {
|
|
289
|
+
if (!createDosaiCryptoAnalysis(src, outputFile, options)) {
|
|
290
|
+
return undefined;
|
|
291
|
+
}
|
|
292
|
+
return readDosaiJsonFile(outputFile);
|
|
293
|
+
} finally {
|
|
294
|
+
if (tempDir?.startsWith(getTmpDir())) {
|
|
295
|
+
safeRmSync(tempDir, { recursive: true, force: true });
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Build the combined native dosai report object persisted for downstream tools.
|
|
302
|
+
*
|
|
303
|
+
* dosai produces TWO native artifacts (methods + dataflows); we wrap them under
|
|
304
|
+
* a single object that carries the producer Metadata plus both sections so
|
|
305
|
+
* downstream consumers (depscan) read one source of truth. The Metadata is
|
|
306
|
+
* taken from the data-flow slice (richest) and falls back to the methods slice.
|
|
307
|
+
* Native/PascalCase keys are preserved losslessly.
|
|
308
|
+
*/
|
|
309
|
+
function buildCombinedDosaiReport(methodsSlice, dataFlowSlice) {
|
|
310
|
+
const metadata = dataFlowSlice?.Metadata ||
|
|
311
|
+
methodsSlice?.Metadata || {
|
|
312
|
+
Tool: "Dosai",
|
|
313
|
+
};
|
|
314
|
+
return {
|
|
315
|
+
Metadata: metadata,
|
|
316
|
+
methods: methodsSlice || {},
|
|
317
|
+
dataflows: dataFlowSlice || {},
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Persist the combined native dosai report to options.semanticsSlicesFile.
|
|
323
|
+
*
|
|
324
|
+
* Mirrors the rusi/golem persistence contract (analyzeRusiProject /
|
|
325
|
+
* analyzeGolemProject on branch feat/rusi-persist-report): when a semantics-
|
|
326
|
+
* slices path is provided, the FULL native report is written there and kept so
|
|
327
|
+
* downstream tools (depscan) can consume the complete methods + data-flow
|
|
328
|
+
* facts that cdxgen only projects a subset of into the SBOM evidence. dotnet
|
|
329
|
+
* does not otherwise use the semantics slice (atom is never run for dotnet),
|
|
330
|
+
* so the path is free to carry the combined dosai report. Returns the resolved
|
|
331
|
+
* durable path when something was persisted, otherwise undefined.
|
|
332
|
+
*/
|
|
333
|
+
export function persistDosaiSemanticsReport(
|
|
334
|
+
options,
|
|
335
|
+
methodsSlice,
|
|
336
|
+
dataFlowSlice,
|
|
337
|
+
) {
|
|
338
|
+
const durablePath = options?.semanticsSlicesFile
|
|
339
|
+
? resolve(options.semanticsSlicesFile)
|
|
340
|
+
: undefined;
|
|
341
|
+
if (!durablePath) {
|
|
342
|
+
return undefined;
|
|
343
|
+
}
|
|
344
|
+
if (
|
|
345
|
+
(!methodsSlice || !Object.keys(methodsSlice).length) &&
|
|
346
|
+
(!dataFlowSlice || !Object.keys(dataFlowSlice).length)
|
|
347
|
+
) {
|
|
348
|
+
return undefined;
|
|
349
|
+
}
|
|
350
|
+
const combined = buildCombinedDosaiReport(methodsSlice, dataFlowSlice);
|
|
351
|
+
safeWriteSync(durablePath, JSON.stringify(combined));
|
|
352
|
+
return durablePath;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* Build a purl alias map for a list of components.
|
|
357
|
+
*
|
|
358
|
+
* @param {Object[]} [components] Component objects with purl fields
|
|
359
|
+
* @returns {Map<string, string>} Map of exact purls and normalized type/namespace/name keys to canonical purls
|
|
360
|
+
*/
|
|
361
|
+
export function buildPurlAliasMap(components = []) {
|
|
362
|
+
return buildDosaiPurlAliasMap(components);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* Resolve a possibly-aliased purl to the canonical component purl.
|
|
367
|
+
*
|
|
368
|
+
* @param {string} purl Purl from a dosai report
|
|
369
|
+
* @param {Map<string, string>} purlAliasMap Alias map built by buildPurlAliasMap
|
|
370
|
+
* @returns {string|undefined} Canonical component purl, the input purl when unaliased, or undefined when empty
|
|
371
|
+
*/
|
|
372
|
+
export function resolveComponentPurl(purl, purlAliasMap) {
|
|
373
|
+
return resolveDosaiComponentPurl(purl, purlAliasMap);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* Map a dosai methods slice to per-purl occurrence evidence.
|
|
378
|
+
*
|
|
379
|
+
* Extracts source locations, imported modules, and called methods from the
|
|
380
|
+
* Dependencies and PackageReachability sections of the slice.
|
|
381
|
+
*
|
|
382
|
+
* @param {Object} methodsSlice Parsed dosai methods slice JSON
|
|
383
|
+
* @param {Object[]} [components] BOM components used to resolve purl aliases
|
|
384
|
+
* @returns {Object} Object with purlLocationMap, purlModulesMap, and purlMethodsMap keyed by purl
|
|
385
|
+
*/
|
|
386
|
+
export function collectDosaiPurlEvidence(methodsSlice, components = []) {
|
|
387
|
+
const purlAliasMap = buildPurlAliasMap(components);
|
|
388
|
+
const purlLocationMap = {};
|
|
389
|
+
const purlModulesMap = {};
|
|
390
|
+
const purlMethodsMap = {};
|
|
391
|
+
const edgesById = new Map(
|
|
392
|
+
(methodsSlice?.CallGraph?.Edges || []).map((edge) => [edge.Id, edge]),
|
|
393
|
+
);
|
|
394
|
+
const nodesById = new Map(
|
|
395
|
+
(methodsSlice?.CallGraph?.Nodes || []).map((node) => [node.Id, node]),
|
|
396
|
+
);
|
|
397
|
+
|
|
398
|
+
for (const dependency of methodsSlice?.Dependencies || []) {
|
|
399
|
+
const purl = resolveComponentPurl(dependency.Purl, purlAliasMap);
|
|
400
|
+
if (!purl) {
|
|
401
|
+
continue;
|
|
402
|
+
}
|
|
403
|
+
addDosaiSetValue(purlLocationMap, purl, dosaiSourceLocation(dependency));
|
|
404
|
+
addDosaiSetValue(
|
|
405
|
+
purlModulesMap,
|
|
406
|
+
purl,
|
|
407
|
+
dependency.Name || dependency.Namespace,
|
|
408
|
+
);
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
for (const reachability of methodsSlice?.PackageReachability || []) {
|
|
412
|
+
const purl = resolveComponentPurl(reachability.Purl, purlAliasMap);
|
|
413
|
+
if (!purl) {
|
|
414
|
+
continue;
|
|
415
|
+
}
|
|
416
|
+
let hasExplicitSourceLocations = false;
|
|
417
|
+
for (const sourceLocation of reachability.SourceLocations || []) {
|
|
418
|
+
const location = dosaiSourceLocation(sourceLocation);
|
|
419
|
+
addDosaiSetValue(purlLocationMap, purl, location);
|
|
420
|
+
hasExplicitSourceLocations ||= Boolean(location);
|
|
421
|
+
}
|
|
422
|
+
for (const edgeId of reachability.EdgeIds || []) {
|
|
423
|
+
const edge = edgesById.get(edgeId);
|
|
424
|
+
if (!hasExplicitSourceLocations) {
|
|
425
|
+
addDosaiSetValue(purlLocationMap, purl, dosaiSourceLocation(edge));
|
|
426
|
+
}
|
|
427
|
+
addDosaiSetValue(
|
|
428
|
+
purlMethodsMap,
|
|
429
|
+
purl,
|
|
430
|
+
edge?.CalledMethodName || edge?.TargetName,
|
|
431
|
+
);
|
|
432
|
+
}
|
|
433
|
+
for (const nodeId of reachability.NodeIds || []) {
|
|
434
|
+
const node = nodesById.get(nodeId);
|
|
435
|
+
if (!hasExplicitSourceLocations) {
|
|
436
|
+
addDosaiSetValue(
|
|
437
|
+
purlLocationMap,
|
|
438
|
+
purl,
|
|
439
|
+
dosaiSourceLocationFromNode(node),
|
|
440
|
+
);
|
|
441
|
+
}
|
|
442
|
+
addDosaiSetValue(purlModulesMap, purl, node?.ClassName || node?.Module);
|
|
443
|
+
addDosaiSetValue(
|
|
444
|
+
purlMethodsMap,
|
|
445
|
+
purl,
|
|
446
|
+
node?.Name || node?.Identity?.MethodName,
|
|
447
|
+
);
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
return { purlLocationMap, purlModulesMap, purlMethodsMap };
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* Extract data-flow call frames per component purl from a dosai data-flow result.
|
|
455
|
+
*
|
|
456
|
+
* Frames are derived from slice and PackageReachability node ids, and grouped
|
|
457
|
+
* under every purl referenced by each flow (source, sink, and intermediate).
|
|
458
|
+
*
|
|
459
|
+
* @param {Object} dataFlowResult Parsed dosai data-flow slice JSON
|
|
460
|
+
* @param {Object[]} [components] BOM components used to resolve purl aliases
|
|
461
|
+
* @returns {Object} Map of canonical purl to arrays of call-stack frame objects
|
|
462
|
+
*/
|
|
463
|
+
export function collectDosaiDataFlowFrames(dataFlowResult, components = []) {
|
|
464
|
+
const purlAliasMap = buildPurlAliasMap(components);
|
|
465
|
+
const nodesById = new Map(
|
|
466
|
+
(dataFlowResult?.Nodes || []).map((node) => [node.Id, node]),
|
|
467
|
+
);
|
|
468
|
+
const dataFlowFrames = {};
|
|
469
|
+
const addFramesForPurl = (purl, frames) => {
|
|
470
|
+
const componentPurl = resolveComponentPurl(purl, purlAliasMap);
|
|
471
|
+
if (!componentPurl || !frames.length) {
|
|
472
|
+
return;
|
|
473
|
+
}
|
|
474
|
+
dataFlowFrames[componentPurl] ??= [];
|
|
475
|
+
dataFlowFrames[componentPurl].push(frames);
|
|
476
|
+
};
|
|
477
|
+
|
|
478
|
+
for (const slice of dataFlowResult?.Slices || []) {
|
|
479
|
+
const frames = (slice.NodeIds || [])
|
|
480
|
+
.map((nodeId) => frameFromDosaiNode(nodesById.get(nodeId)))
|
|
481
|
+
.filter(Boolean);
|
|
482
|
+
const purls = new Set(
|
|
483
|
+
[...(slice.Purls || []), slice.SourcePurl, slice.SinkPurl].filter(
|
|
484
|
+
Boolean,
|
|
485
|
+
),
|
|
486
|
+
);
|
|
487
|
+
for (const purl of purls) {
|
|
488
|
+
addFramesForPurl(purl, frames);
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
for (const reachability of dataFlowResult?.PackageReachability || []) {
|
|
493
|
+
const frames = (reachability.NodeIds || [])
|
|
494
|
+
.map((nodeId) => frameFromDosaiNode(nodesById.get(nodeId)))
|
|
495
|
+
.filter(Boolean);
|
|
496
|
+
addFramesForPurl(reachability.Purl, frames);
|
|
497
|
+
}
|
|
498
|
+
return dataFlowFrames;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
/**
|
|
502
|
+
* Infer service and endpoint definitions from a dosai methods slice.
|
|
503
|
+
*
|
|
504
|
+
* Sanitizes API endpoint routes, derives stable service names, and records
|
|
505
|
+
* `cdx:dosai:*` properties (http method, auth requirements, claim counts) per
|
|
506
|
+
* service in the supplied map, mutating it in place.
|
|
507
|
+
*
|
|
508
|
+
* @param {Object} methodsSlice Parsed dosai methods slice JSON
|
|
509
|
+
* @param {Object} [servicesMap] Map of service name to service definition, mutated in place
|
|
510
|
+
* @returns {Object} The updated services map
|
|
511
|
+
*/
|
|
512
|
+
export function collectDosaiServicesFromMethods(
|
|
513
|
+
methodsSlice,
|
|
514
|
+
servicesMap = {},
|
|
515
|
+
) {
|
|
516
|
+
for (const endpoint of methodsSlice?.ApiEndpoints || []) {
|
|
517
|
+
const route = sanitizeEndpoint(endpoint.Route || endpoint.Path);
|
|
518
|
+
if (!route) {
|
|
519
|
+
continue;
|
|
520
|
+
}
|
|
521
|
+
const serviceName = serviceNameFromEndpoint(endpoint);
|
|
522
|
+
servicesMap[serviceName] ??= {
|
|
523
|
+
endpoints: new Set(),
|
|
524
|
+
authenticated: endpoint.AuthorizationRequired,
|
|
525
|
+
xTrustBoundary:
|
|
526
|
+
endpoint.AuthorizationRequired === true ? true : undefined,
|
|
527
|
+
properties: [],
|
|
528
|
+
};
|
|
529
|
+
servicesMap[serviceName].endpoints.add(route);
|
|
530
|
+
const properties = servicesMap[serviceName].properties;
|
|
531
|
+
appendUniqueProperty(
|
|
532
|
+
properties,
|
|
533
|
+
"cdx:service:httpMethod",
|
|
534
|
+
endpoint.HttpMethod || "ANY",
|
|
535
|
+
);
|
|
536
|
+
appendUniqueProperty(
|
|
537
|
+
properties,
|
|
538
|
+
"cdx:dosai:endpointKind",
|
|
539
|
+
endpoint.EndpointKind,
|
|
540
|
+
);
|
|
541
|
+
appendUniqueProperty(
|
|
542
|
+
properties,
|
|
543
|
+
"cdx:dosai:authorizationRequired",
|
|
544
|
+
endpoint.AuthorizationRequired,
|
|
545
|
+
);
|
|
546
|
+
appendUniqueProperty(
|
|
547
|
+
properties,
|
|
548
|
+
"cdx:dosai:allowAnonymous",
|
|
549
|
+
endpoint.AllowAnonymous,
|
|
550
|
+
);
|
|
551
|
+
appendUniqueProperty(
|
|
552
|
+
properties,
|
|
553
|
+
"cdx:dosai:authorizationPolicyCount",
|
|
554
|
+
endpoint.AuthorizationPolicies?.length,
|
|
555
|
+
);
|
|
556
|
+
appendUniqueProperty(
|
|
557
|
+
properties,
|
|
558
|
+
"cdx:dosai:roleCount",
|
|
559
|
+
endpoint.Roles?.length,
|
|
560
|
+
);
|
|
561
|
+
appendUniqueProperty(
|
|
562
|
+
properties,
|
|
563
|
+
"cdx:dosai:requiredClaimCount",
|
|
564
|
+
endpoint.RequiredClaims?.length,
|
|
565
|
+
);
|
|
566
|
+
appendUniqueProperty(
|
|
567
|
+
properties,
|
|
568
|
+
"cdx:dosai:requiredScopeCount",
|
|
569
|
+
endpoint.RequiredScopes?.length,
|
|
570
|
+
);
|
|
571
|
+
appendUniqueProperty(
|
|
572
|
+
properties,
|
|
573
|
+
"internal:SrcFile",
|
|
574
|
+
endpoint.Path || endpoint.FileName,
|
|
575
|
+
);
|
|
576
|
+
if (endpoint.LineNumber) {
|
|
577
|
+
appendUniqueProperty(
|
|
578
|
+
properties,
|
|
579
|
+
"cdx:dosai:location",
|
|
580
|
+
`${endpoint.Path || endpoint.FileName}:${endpoint.LineNumber}:${endpoint.ColumnNumber || 0}`,
|
|
581
|
+
);
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
return servicesMap;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
/**
|
|
588
|
+
* Normalize a services map into a sorted array of CycloneDX service objects.
|
|
589
|
+
*
|
|
590
|
+
* @param {Object} [servicesMap] Map of service name to service definition with Set-backed endpoints
|
|
591
|
+
* @returns {Object[]} Array of service objects with sorted endpoint arrays and properties
|
|
592
|
+
*/
|
|
593
|
+
export function normalizeDosaiServiceMap(servicesMap = {}) {
|
|
594
|
+
return Object.keys(servicesMap).map((serviceName) => ({
|
|
595
|
+
name: serviceName || `dosai-${basename(serviceName)}-service`,
|
|
596
|
+
endpoints: Array.from(servicesMap[serviceName].endpoints || []).sort(),
|
|
597
|
+
authenticated: servicesMap[serviceName].authenticated,
|
|
598
|
+
"x-trust-boundary": servicesMap[serviceName].xTrustBoundary,
|
|
599
|
+
properties: servicesMap[serviceName].properties,
|
|
600
|
+
}));
|
|
601
|
+
}
|