snyk 1.933.0 → 1.934.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"784.index.js","mappings":"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","sources":["webpack://snyk/./node_modules/@yarnpkg/core/lib|sync","webpack://snyk/./node_modules/keyv/src|sync","webpack://snyk/./src/cli/commands/monitor/index.ts","webpack://snyk/./src/cli/commands/monitor/process-json-monitor.ts","webpack://snyk/./src/cli/commands/process-command-args.ts","webpack://snyk/./src/cli/commands/types.ts","webpack://snyk/./src/lib/code-config.ts","webpack://snyk/./src/lib/constants.ts","webpack://snyk/./src/lib/ecosystems/common.ts","webpack://snyk/./src/lib/ecosystems/index.ts","webpack://snyk/./src/lib/ecosystems/monitor.ts","webpack://snyk/./src/lib/ecosystems/plugin-analytics.ts","webpack://snyk/./src/lib/ecosystems/plugins.ts","webpack://snyk/./src/lib/ecosystems/policy.ts","webpack://snyk/./src/lib/ecosystems/resolve-monitor-facts.ts","webpack://snyk/./src/lib/ecosystems/resolve-test-facts.ts","webpack://snyk/./src/lib/ecosystems/test.ts","webpack://snyk/./src/lib/error-format.ts","webpack://snyk/./src/lib/errors/invalid-remote-url-error.ts","webpack://snyk/./src/lib/feature-flags/index.ts","webpack://snyk/./src/lib/find-files.ts","webpack://snyk/./src/lib/formatters/docker/format-docker-advice.ts","webpack://snyk/./src/lib/formatters/docker/format-docker-binary-heading.ts","webpack://snyk/./src/lib/formatters/docker/format-docker-binary-issues.ts","webpack://snyk/./src/lib/formatters/docker/index.ts","webpack://snyk/./src/lib/formatters/format-error-result-summary.ts","webpack://snyk/./src/lib/formatters/format-monitor-response.ts","webpack://snyk/./src/lib/formatters/format-reachability.ts","webpack://snyk/./src/lib/formatters/format-test-meta.ts","webpack://snyk/./src/lib/formatters/format-vulnerable-result-summary.ts","webpack://snyk/./src/lib/formatters/get-severity-value.ts","webpack://snyk/./src/lib/formatters/iac-output/index.ts","webpack://snyk/./src/lib/formatters/iac-output/v1/index.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/failures/index.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/failures/list.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/failures/tip.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/index.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/issues-list/formatters.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/issues-list/index.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/issues-list/issue.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/share-results.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/test-summary.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/user-messages.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/utils.ts","webpack://snyk/./src/lib/formatters/index.ts","webpack://snyk/./src/lib/formatters/legacy-format-issue.ts","webpack://snyk/./src/lib/formatters/legal-license-instructions.ts","webpack://snyk/./src/lib/formatters/remediation-based-format-issues.ts","webpack://snyk/./src/lib/formatters/sarif-output.ts","webpack://snyk/./src/lib/formatters/show-all-projects-tip.ts","webpack://snyk/./src/lib/formatters/show-all-sub-projects-tip.ts","webpack://snyk/./src/lib/formatters/show-multi-scan-tip.ts","webpack://snyk/./src/lib/get-file-contents.ts","webpack://snyk/./src/lib/iac/constants.ts","webpack://snyk/./src/lib/iac/git.ts","webpack://snyk/./src/lib/is-multi-project-scan.ts","webpack://snyk/./src/lib/json.ts","webpack://snyk/./src/lib/module-info/index.ts","webpack://snyk/./src/lib/monitor/count-total-deps-in-tree.ts","webpack://snyk/./src/lib/monitor/dev-count-analysis.ts","webpack://snyk/./src/lib/monitor/drop-empty-deps.ts","webpack://snyk/./src/lib/monitor/filter-out-missing-deps.ts","webpack://snyk/./src/lib/monitor/index.ts","webpack://snyk/./src/lib/monitor/prune-dep-tree.ts","webpack://snyk/./src/lib/monitor/utils.ts","webpack://snyk/./src/lib/options-validator.ts","webpack://snyk/./src/lib/plugins/convert-multi-plugin-res-to-multi-custom.ts","webpack://snyk/./src/lib/plugins/convert-scanned-projects-to-custom.ts","webpack://snyk/./src/lib/plugins/convert-single-splugin-res-to-multi-custom.ts","webpack://snyk/./src/lib/plugins/extract-package-manager.ts","webpack://snyk/./src/lib/plugins/get-deps-from-plugin.ts","webpack://snyk/./src/lib/plugins/get-extra-project-count.ts","webpack://snyk/./src/lib/plugins/get-multi-plugin-result.ts","webpack://snyk/./src/lib/plugins/get-single-plugin-result.ts","webpack://snyk/./src/lib/plugins/index.ts","webpack://snyk/./src/lib/plugins/nodejs-plugin/index.ts","webpack://snyk/./src/lib/plugins/nodejs-plugin/npm-lock-parser.ts","webpack://snyk/./src/lib/plugins/nodejs-plugin/npm-modules-parser.ts","webpack://snyk/./src/lib/plugins/nodejs-plugin/yarn-workspaces-parser.ts","webpack://snyk/./src/lib/plugins/rubygems/index.ts","webpack://snyk/./src/lib/plugins/rubygems/inspectors/gemfile.ts","webpack://snyk/./src/lib/plugins/rubygems/inspectors/gemspec.ts","webpack://snyk/./src/lib/plugins/rubygems/inspectors/index.ts","webpack://snyk/./src/lib/plugins/rubygems/inspectors/try-get-spec.ts","webpack://snyk/./src/lib/plugins/sast/analysis.ts","webpack://snyk/./src/lib/plugins/sast/checks.ts","webpack://snyk/./src/lib/plugins/sast/errors/index.ts","webpack://snyk/./src/lib/plugins/sast/errors/missing-configuration-error.ts","webpack://snyk/./src/lib/plugins/sast/errors/unsupported-feature-snyk-code-error.ts","webpack://snyk/./src/lib/plugins/sast/format/output-format.ts","webpack://snyk/./src/lib/plugins/sast/index.ts","webpack://snyk/./src/lib/plugins/sast/settings.ts","webpack://snyk/./src/lib/plugins/sast/utils/index.ts","webpack://snyk/./src/lib/plugins/sast/utils/testEmitter.ts","webpack://snyk/./src/lib/policy/find-and-load-policy.ts","webpack://snyk/./src/lib/policy/index.ts","webpack://snyk/./src/lib/policy/pluck-policies.ts","webpack://snyk/./src/lib/polling/common.ts","webpack://snyk/./src/lib/polling/polling-monitor.ts","webpack://snyk/./src/lib/polling/polling-test.ts","webpack://snyk/./src/lib/print-deps.ts","webpack://snyk/./src/lib/project-metadata/index.ts","webpack://snyk/./src/lib/project-metadata/target-builders/container.ts","webpack://snyk/./src/lib/project-metadata/target-builders/git.ts","webpack://snyk/./src/lib/project-metadata/types.ts","webpack://snyk/./src/lib/prune.ts","webpack://snyk/./src/lib/reachable-vulns.ts","webpack://snyk/./src/lib/request/promise.ts","webpack://snyk/./src/lib/right-pad.ts","webpack://snyk/./src/lib/snyk-test/assemble-payloads.ts","webpack://snyk/./src/lib/snyk-test/legacy.ts","webpack://snyk/./src/lib/snyk-test/run-test.ts","webpack://snyk/./src/lib/sub-process.ts","webpack://snyk/./src/lib/index.js","webpack://snyk/./src/lib/plugins/rubygems/gemfile-lock-to-dependencies.js","webpack://snyk/./src/lib/snyk-test/index.js"],"sourcesContent":["function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = () => ([]);\nwebpackEmptyContext.resolve = webpackEmptyContext;\nwebpackEmptyContext.id = 61452;\nmodule.exports = webpackEmptyContext;","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = () => ([]);\nwebpackEmptyContext.resolve = webpackEmptyContext;\nwebpackEmptyContext.id = 3196;\nmodule.exports = webpackEmptyContext;","import chalk from 'chalk';\nimport * as fs from 'fs';\nimport * as Debug from 'debug';\nimport * as pathUtil from 'path';\nimport { legacyPlugin as pluginApi } from '@snyk/cli-interface';\nimport { validateOptions } from '../../../lib/options-validator';\n\nimport {\n MonitorOptions,\n MonitorMeta,\n MonitorResult,\n Options,\n Contributor,\n ProjectAttributes,\n PROJECT_CRITICALITY,\n PROJECT_ENVIRONMENT,\n PROJECT_LIFECYCLE,\n Tag,\n} from '../../../lib/types';\nimport config from '../../../lib/config';\nimport * as detect from '../../../lib/detect';\nimport { GoodResult, BadResult } from './types';\nimport { spinner } from '../../../lib/spinner';\nimport * as analytics from '../../../lib/analytics';\nimport { MethodArgs } from '../../args';\nimport { apiOrOAuthTokenExists } from '../../../lib/api-token';\nimport { maybePrintDepTree, maybePrintDepGraph } from '../../../lib/print-deps';\nimport { monitor as snykMonitor } from '../../../lib/monitor';\nimport { processJsonMonitorResponse } from './process-json-monitor';\nimport snyk = require('../../../lib'); // TODO(kyegupov): fix import\nimport { formatMonitorOutput } from '../../../lib/formatters';\nimport { getDepsFromPlugin } from '../../../lib/plugins/get-deps-from-plugin';\nimport { getExtraProjectCount } from '../../../lib/plugins/get-extra-project-count';\nimport { extractPackageManager } from '../../../lib/plugins/extract-package-manager';\nimport { MultiProjectResultCustom } from '../../../lib/plugins/get-multi-plugin-result';\nimport { convertMultiResultToMultiCustom } from '../../../lib/plugins/convert-multi-plugin-res-to-multi-custom';\nimport { convertSingleResultToMultiCustom } from '../../../lib/plugins/convert-single-splugin-res-to-multi-custom';\nimport { PluginMetadata } from '@snyk/cli-interface/legacy/plugin';\nimport { getContributors } from '../../../lib/monitor/dev-count-analysis';\nimport {\n FailedToRunTestError,\n MonitorError,\n MissingArgError,\n ValidationError,\n} from '../../../lib/errors';\nimport { isMultiProjectScan } from '../../../lib/is-multi-project-scan';\nimport { getEcosystem, monitorEcosystem } from '../../../lib/ecosystems';\nimport { getFormattedMonitorOutput } from '../../../lib/ecosystems/monitor';\nimport { processCommandArgs } from '../process-command-args';\n\nconst SEPARATOR = '\\n-------------------------------------------------------\\n';\nconst debug = Debug('snyk');\n\n// This is used instead of `let x; try { x = await ... } catch { cleanup }` to avoid\n// declaring the type of x as possibly undefined.\nasync function promiseOrCleanup<T>(\n p: Promise<T>,\n cleanup: (x?) => void,\n): Promise<T> {\n return p.catch((error) => {\n cleanup();\n throw error;\n });\n}\n\n// Returns an array of Registry responses (one per every sub-project scanned), a single response,\n// or an error message.\nexport default async function monitor(...args0: MethodArgs): Promise<any> {\n const { options, paths } = processCommandArgs(...args0);\n const results: Array<GoodResult | BadResult> = [];\n\n if (options.id) {\n snyk.id = options.id;\n }\n\n if (options.allSubProjects && options['project-name']) {\n throw new Error(\n '`--all-sub-projects` is currently not compatible with `--project-name`',\n );\n }\n\n if (options.docker && options['remote-repo-url']) {\n throw new Error('`--remote-repo-url` is not supported for container scans');\n }\n\n // Handles no image arg provided to the container command until\n // a validation interface is implemented in the docker plugin.\n if (options.docker && paths.length === 0) {\n throw new MissingArgError();\n }\n\n apiOrOAuthTokenExists();\n\n let contributors: Contributor[] = [];\n if (!options.docker && analytics.allowAnalytics()) {\n try {\n contributors = await getContributors();\n } catch (err) {\n debug('error getting repo contributors', err);\n }\n }\n\n const ecosystem = getEcosystem(options);\n if (ecosystem) {\n const commandResult = await monitorEcosystem(\n ecosystem,\n paths,\n options,\n contributors,\n );\n\n const [monitorResults, monitorErrors] = commandResult;\n\n return await getFormattedMonitorOutput(\n results,\n monitorResults,\n monitorErrors,\n options,\n );\n }\n\n // Part 1: every argument is a scan target; process them sequentially\n for (const path of paths) {\n debug(`Processing ${path}...`);\n try {\n validateMonitorPath(path, options.docker);\n let analysisType = 'all';\n let packageManager;\n if (isMultiProjectScan(options)) {\n analysisType = 'all';\n } else if (options.docker) {\n analysisType = 'docker';\n } else {\n packageManager = detect.detectPackageManager(path, options);\n }\n\n await validateOptions(\n options as Options & MonitorOptions,\n packageManager,\n );\n\n const targetFile =\n !options.scanAllUnmanaged && options.docker && !options.file // snyk monitor --docker (without --file)\n ? undefined\n : options.file || detect.detectPackageFile(path);\n\n const displayPath = pathUtil.relative(\n '.',\n pathUtil.join(path, targetFile || ''),\n );\n\n const analyzingDepsSpinnerLabel =\n 'Analyzing ' +\n (packageManager ? packageManager : analysisType) +\n ' dependencies for ' +\n displayPath;\n\n await spinner(analyzingDepsSpinnerLabel);\n\n // Scan the project dependencies via a plugin\n debug('getDepsFromPlugin ...');\n\n // each plugin will be asked to scan once per path\n // some return single InspectResult & newer ones return Multi\n const inspectResult = await promiseOrCleanup(\n getDepsFromPlugin(path, {\n ...options,\n path,\n packageManager,\n }),\n spinner.clear(analyzingDepsSpinnerLabel),\n );\n analytics.add('pluginName', inspectResult.plugin.name);\n\n // We send results from \"all-sub-projects\" scanning as different Monitor objects\n // multi result will become default, so start migrating code to always work with it\n let perProjectResult: MultiProjectResultCustom;\n\n if (!pluginApi.isMultiResult(inspectResult)) {\n perProjectResult = convertSingleResultToMultiCustom(inspectResult);\n } else {\n perProjectResult = convertMultiResultToMultiCustom(inspectResult);\n }\n\n const failedResults = (inspectResult as MultiProjectResultCustom)\n .failedResults;\n if (failedResults?.length) {\n failedResults.forEach((result) => {\n results.push({\n ok: false,\n data: new MonitorError(500, result.errMessage),\n path: result.targetFile || '',\n });\n });\n }\n\n const postingMonitorSpinnerLabel =\n 'Posting monitor snapshot for ' + displayPath + ' ...';\n await spinner(postingMonitorSpinnerLabel);\n\n // Post the project dependencies to the Registry\n for (const projectDeps of perProjectResult.scannedProjects) {\n try {\n if (!projectDeps.depGraph && !projectDeps.depTree) {\n debug(\n 'scannedProject is missing depGraph or depTree, cannot run test/monitor',\n );\n throw new FailedToRunTestError(\n 'Your monitor request could not be completed. Please email support@snyk.io',\n );\n }\n const extractedPackageManager = extractPackageManager(\n projectDeps,\n perProjectResult,\n options as MonitorOptions & Options,\n );\n\n analytics.add('packageManager', extractedPackageManager);\n\n const projectName = getProjectName(projectDeps);\n if (projectDeps.depGraph) {\n debug(`Processing ${projectDeps.depGraph.rootPkg?.name}...`);\n maybePrintDepGraph(options, projectDeps.depGraph);\n }\n\n if (projectDeps.depTree) {\n debug(`Processing ${projectDeps.depTree.name}...`);\n maybePrintDepTree(options, projectDeps.depTree);\n }\n\n const tFile = projectDeps.targetFile || targetFile;\n const targetFileRelativePath =\n projectDeps.plugin.targetFile ||\n (tFile && pathUtil.join(pathUtil.resolve(path), tFile)) ||\n '';\n\n const res: MonitorResult = await promiseOrCleanup(\n snykMonitor(\n path,\n generateMonitorMeta(options, extractedPackageManager),\n projectDeps,\n options,\n projectDeps.plugin as PluginMetadata,\n targetFileRelativePath,\n contributors,\n generateProjectAttributes(options),\n generateTags(options),\n ),\n spinner.clear(postingMonitorSpinnerLabel),\n );\n\n res.path = path;\n const monOutput = formatMonitorOutput(\n extractedPackageManager,\n res,\n options,\n projectName,\n await getExtraProjectCount(path, options, inspectResult),\n );\n // push a good result\n results.push({ ok: true, data: monOutput, path, projectName });\n } catch (err) {\n // pushing this error allow this inner loop to keep scanning the projects\n // even if 1 in 100 fails\n results.push({ ok: false, data: err, path });\n }\n }\n } catch (err) {\n // push this error, the loop continues\n results.push({ ok: false, data: err, path });\n } finally {\n spinner.clearAll();\n }\n }\n // Part 2: process the output from the Registry\n if (options.json) {\n return processJsonMonitorResponse(results);\n }\n\n const output = results\n .map((res) => {\n if (res.ok) {\n return res.data;\n }\n\n const errorMessage =\n res.data && res.data.userMessage\n ? chalk.bold.red(res.data.userMessage)\n : res.data\n ? res.data.message\n : 'Unknown error occurred.';\n\n return (\n chalk.bold.white('\\nMonitoring ' + res.path + '...\\n\\n') + errorMessage\n );\n })\n .join('\\n' + SEPARATOR);\n\n if (results.every((res) => res.ok)) {\n return output;\n }\n\n throw new Error(output);\n}\n\nfunction generateMonitorMeta(options, packageManager?): MonitorMeta {\n return {\n method: 'cli',\n packageManager,\n 'policy-path': options['policy-path'],\n 'project-name': options['project-name'] || config.PROJECT_NAME,\n isDocker: !!options.docker,\n prune: !!options.pruneRepeatedSubdependencies,\n 'remote-repo-url': options['remote-repo-url'],\n targetReference: options['target-reference'],\n };\n}\n\n/**\n * Parse an attribute from the CLI into the relevant enum type.\n *\n * @param attribute The project attribute (e.g. environment)\n * @param permitted Permitted options\n * @param options CLI options provided\n * @returns An array of attributes to set on the project or undefined to mean \"do not touch\".\n */\nfunction getProjectAttribute<T>(\n attribute: string,\n permitted: Record<string, T>,\n options: Options,\n): T[] | undefined {\n const permittedValues: T[] = Object.values(permitted);\n\n if (options[attribute] === undefined) {\n return undefined;\n }\n\n // Explicit flag to clear the existing values for this attribute already set on the project\n // e.g. if you specify --environment=\n // then this means you want to remove existing environment values on the project.\n if (options[attribute] === '') {\n return [];\n }\n\n // When it's specified without the =, we raise an explicit error to avoid\n // accidentally clearing the existing values.\n if (options[attribute] === true) {\n throw new ValidationError(\n `--${attribute} must contain an '=' with a comma-separated list of values. To clear all existing values, pass no values i.e. --${attribute}=`,\n );\n }\n\n const values = options[attribute].split(',');\n const extra = values.filter((value) => !permittedValues.includes(value));\n if (extra.length > 0) {\n throw new ValidationError(\n `${extra.length} invalid ${attribute}: ${extra.join(', ')}. ` +\n `Possible values are: ${permittedValues.join(', ')}`,\n );\n }\n\n return values;\n}\n\nexport function validateProjectAttributes(options): void {\n // The validation is deep within the parsing, so call the generate but throw away the return for simplicity.\n // Using this method makes it much clearer what the intent is of the caller.\n generateProjectAttributes(options);\n}\n\nexport function generateProjectAttributes(options): ProjectAttributes {\n return {\n criticality: getProjectAttribute(\n 'project-business-criticality',\n PROJECT_CRITICALITY,\n options,\n ),\n environment: getProjectAttribute(\n 'project-environment',\n PROJECT_ENVIRONMENT,\n options,\n ),\n lifecycle: getProjectAttribute(\n 'project-lifecycle',\n PROJECT_LIFECYCLE,\n options,\n ),\n };\n}\n\n/**\n * Parse CLI --tags options into an internal data structure.\n *\n * If this returns undefined, it means \"do not touch the existing tags on the project\".\n *\n * Anything else means \"replace existing tags on the project with this list\" even if empty.\n *\n * @param options CLI options\n * @returns List of parsed tags or undefined if they are to be left untouched.\n */\nexport function generateTags(options): Tag[] | undefined {\n if (options['project-tags'] === undefined && options['tags'] === undefined) {\n return undefined;\n }\n\n if (options['project-tags'] !== undefined && options['tags'] !== undefined) {\n throw new ValidationError(\n 'Only one of --tags or --project-tags may be specified, not both',\n );\n }\n\n const rawTags =\n options['tags'] === undefined ? options['project-tags'] : options['tags'];\n\n if (rawTags === '') {\n return [];\n }\n\n // When it's specified without the =, we raise an explicit error to avoid\n // accidentally clearing the existing tags;\n if (rawTags === true) {\n throw new ValidationError(\n `--project-tags must contain an '=' with a comma-separated list of pairs (also separated with an '='). To clear all existing values, pass no values i.e. --project-tags=`,\n );\n }\n\n const keyEqualsValuePairs = rawTags.split(',');\n\n const tags: Tag[] = [];\n for (const keyEqualsValue of keyEqualsValuePairs) {\n const parts = keyEqualsValue.split('=');\n if (parts.length !== 2) {\n throw new ValidationError(\n `The tag \"${keyEqualsValue}\" does not have an \"=\" separating the key and value. For example: --project-tag=KEY=VALUE`,\n );\n }\n tags.push({\n key: parts[0],\n value: parts[1],\n });\n }\n\n return tags;\n}\n\nexport function validateTags(options): void {\n // The validation is deep within the parsing, so call the generate but throw away the return for simplicity.\n // Using this method makes it much clearer what the intent is of the caller.\n generateTags(options);\n}\n\nfunction validateMonitorPath(path: string, isDocker?: boolean): void {\n const exists = fs.existsSync(path);\n if (!exists && !isDocker) {\n throw new Error('\"' + path + '\" is not a valid path for \"snyk monitor\"');\n }\n}\n\nfunction getProjectName(projectDeps): string {\n return (\n projectDeps.meta?.gradleProjectName ||\n projectDeps.depGraph?.rootPkg?.name ||\n projectDeps.depTree?.name\n );\n}\n","import { GoodResult, BadResult } from './types';\n\nexport function processJsonMonitorResponse(\n results: Array<GoodResult | BadResult>,\n): string {\n let dataToSend = results.map((result) => {\n if (result.ok) {\n const jsonData = JSON.parse(result.data);\n if (result.projectName) {\n jsonData.projectName = result.projectName;\n }\n return jsonData;\n }\n return { ok: false, error: result.data.message, path: result.path };\n });\n // backwards compat - strip array if only one result\n dataToSend = dataToSend.length === 1 ? dataToSend[0] : dataToSend;\n const stringifiedData = JSON.stringify(dataToSend, null, 2);\n\n if (results.every((res) => res.ok)) {\n return stringifiedData;\n }\n const err = new Error(stringifiedData) as any;\n err.json = stringifiedData;\n throw err;\n}\n","import { Options } from '../../lib/types';\n\nexport function processCommandArgs<CommandOptions>(\n ...args\n): { paths: string[]; options: Options & CommandOptions } {\n let options = ({} as any) as Options & CommandOptions;\n\n if (typeof args[args.length - 1] === 'object') {\n options = (args.pop() as any) as Options & CommandOptions;\n }\n args = args.filter(Boolean);\n\n // For repository scanning, populate with default path (cwd) if no path given\n if (args.length === 0 && !options.docker) {\n args.unshift(process.cwd());\n }\n\n return { options, paths: args };\n}\n","export type MethodResult = CommandResult | string | void;\n\nexport class CommandResult {\n result: string;\n constructor(result: string) {\n this.result = result;\n }\n\n public toString(): string {\n return this.result;\n }\n\n public getDisplayResults() {\n return this.result;\n }\n}\n\nexport abstract class TestCommandResult extends CommandResult {\n protected jsonResult = '';\n protected sarifResult = '';\n\n public getJsonResult(): string {\n return this.jsonResult;\n }\n\n public getSarifResult(): string {\n return this.sarifResult;\n }\n\n public static createHumanReadableTestCommandResult(\n humanReadableResult: string,\n jsonResult: string,\n sarifResult?: string,\n ): HumanReadableTestCommandResult {\n return new HumanReadableTestCommandResult(\n humanReadableResult,\n jsonResult,\n sarifResult,\n );\n }\n\n public static createJsonTestCommandResult(\n stdout: string,\n jsonResult?: string,\n sarifResult?: string,\n ): JsonTestCommandResult {\n return new JsonTestCommandResult(stdout, jsonResult, sarifResult);\n }\n}\n\nclass HumanReadableTestCommandResult extends TestCommandResult {\n protected jsonResult = '';\n protected sarifResult = '';\n\n constructor(\n humanReadableResult: string,\n jsonResult: string,\n sarifResult?: string,\n ) {\n super(humanReadableResult);\n this.jsonResult = jsonResult;\n if (sarifResult) {\n this.sarifResult = sarifResult;\n }\n }\n\n public getJsonResult(): string {\n return this.jsonResult;\n }\n\n public getSarifResult(): string {\n return this.sarifResult;\n }\n}\n\nclass JsonTestCommandResult extends TestCommandResult {\n constructor(stdout: string, jsonResult?: string, sarifResult?: string) {\n super(stdout);\n if (jsonResult) {\n this.jsonResult = jsonResult;\n }\n if (sarifResult) {\n this.sarifResult = sarifResult;\n } else {\n this.jsonResult = stdout;\n }\n }\n\n public getJsonResult(): string {\n return this.jsonResult;\n }\n\n public getSarifResult(): string {\n return this.sarifResult;\n }\n}\n\nexport interface IgnoreMetadata {\n reason: string;\n expires: Date;\n created: Date;\n}\n\nexport interface IgnoreRulePathData {\n [path: string]: IgnoreMetadata;\n}\n\nexport interface IgnoreRules {\n [issueId: string]: IgnoreRulePathData[];\n}\n","import config from './config';\nimport { config as userConfig } from './user-config';\n\nexport function getCodeClientProxyUrl() {\n const url = new URL(config.API);\n const domain = url.origin;\n return (\n config.CODE_CLIENT_PROXY_URL ||\n domain.replace(/\\/\\/(app\\.)?/, '//deeproxy.')\n );\n}\n\nexport function getBase64Encoding(\n enabled = userConfig.get('use-base64-encoding'),\n): boolean {\n if (enabled) {\n return enabled.toLowerCase() === 'true';\n }\n return false;\n}\n","// Separator used while displaying various paths (e.g. package paths, call\n// paths) to the user\nexport const PATH_SEPARATOR = ' > ';\n\n// String used to signify hidden path elements e.g. for abbreviated paths\nexport const PATH_HIDDEN_ELEMENTS = '...';\n\n// Number of function names to show in the beginning of an abbreviated call path\nexport const CALL_PATH_LEADING_ELEMENTS = 2;\n\n// Number of function names to show in the end of an abbreviated call path\nexport const CALL_PATH_TRAILING_ELEMENTS = 2;\n","import { Ecosystem } from './types';\n\nexport function isUnmanagedEcosystem(ecosystem: Ecosystem): boolean {\n return ecosystem === 'cpp';\n}\n","import { Options } from '../types';\nimport { Ecosystem } from './types';\n\nexport { testEcosystem } from './test';\nexport { monitorEcosystem } from './monitor';\nexport { getPlugin } from './plugins';\n\n/**\n * Ecosystems are listed here if you opt in to the new plugin test flow.\n * This is a breaking change to the old plugin formats, so only a select few\n * plugins currently work with it.\n *\n * Currently container scanning is not yet ready to work with this flow,\n * hence this is in a separate function from getEcosystem().\n */\nexport function getEcosystemForTest(options: Options): Ecosystem | null {\n if (options.unmanaged) {\n return 'cpp';\n }\n if (options.code) {\n return 'code';\n }\n return null;\n}\n\nexport function getEcosystem(options: Options): Ecosystem | null {\n if (options.unmanaged) {\n return 'cpp';\n }\n\n if (options.docker) {\n return 'docker';\n }\n return null;\n}\n","import { InspectResult } from '@snyk/cli-interface/legacy/plugin';\nimport chalk from 'chalk';\nimport config from '../config';\nimport { isCI } from '../is-ci';\nimport { makeRequest } from '../request/promise';\nimport { Contributor, MonitorResult, Options, PolicyOptions } from '../types';\nimport { spinner } from '../../lib/spinner';\nimport { getPlugin } from './plugins';\nimport { BadResult, GoodResult } from '../../cli/commands/monitor/types';\nimport { formatErrorMonitorOutput, formatMonitorOutput } from '../formatters';\nimport { getExtraProjectCount } from '../plugins/get-extra-project-count';\nimport {\n AuthFailedError,\n DockerImageNotFoundError,\n MonitorError,\n} from '../errors';\nimport {\n Ecosystem,\n ScanResult,\n EcosystemMonitorResult,\n EcosystemMonitorError,\n MonitorDependenciesRequest,\n MonitorDependenciesResponse,\n} from './types';\nimport { findAndLoadPolicyForScanResult } from './policy';\nimport { getAuthHeader } from '../api-token';\nimport { resolveAndMonitorFacts } from './resolve-monitor-facts';\nimport {\n generateProjectAttributes,\n generateTags,\n validateProjectAttributes,\n validateTags,\n} from '../../cli/commands/monitor';\nimport { isUnmanagedEcosystem } from './common';\nimport { findAndLoadPolicy } from '../policy';\n\nconst SEPARATOR = '\\n-------------------------------------------------------\\n';\n\nexport async function monitorEcosystem(\n ecosystem: Ecosystem,\n paths: string[],\n options: Options & PolicyOptions,\n contributors?: Contributor[],\n): Promise<[EcosystemMonitorResult[], EcosystemMonitorError[]]> {\n const plugin = getPlugin(ecosystem);\n\n validateTags(options);\n validateProjectAttributes(options);\n\n const scanResultsByPath: { [dir: string]: ScanResult[] } = {};\n for (const path of paths) {\n try {\n await spinner(`Analyzing dependencies in ${path}`);\n options.path = path;\n const pluginResponse = await plugin.scan(options);\n scanResultsByPath[path] = pluginResponse.scanResults;\n\n const policy = await findAndLoadPolicy(path, 'cpp', options);\n if (policy) {\n scanResultsByPath[path].forEach(\n (scanResult) => (scanResult.policy = policy.toString()),\n );\n }\n } catch (error) {\n if (\n ecosystem === 'docker' &&\n error.statusCode === 401 &&\n error.message === 'authentication required'\n ) {\n throw new DockerImageNotFoundError(path);\n }\n if (ecosystem === 'docker' && error.message === 'invalid image format') {\n throw new DockerImageNotFoundError(path);\n }\n\n throw error;\n } finally {\n spinner.clearAll();\n }\n }\n const [monitorResults, errors] = await selectAndExecuteMonitorStrategy(\n ecosystem,\n scanResultsByPath,\n options,\n contributors,\n );\n return [monitorResults, errors];\n}\n\nasync function selectAndExecuteMonitorStrategy(\n ecosystem: Ecosystem,\n scanResultsByPath: { [dir: string]: ScanResult[] },\n options: Options,\n contributors?: Contributor[],\n): Promise<[EcosystemMonitorResult[], EcosystemMonitorError[]]> {\n return isUnmanagedEcosystem(ecosystem)\n ? await resolveAndMonitorFacts(scanResultsByPath, options, contributors)\n : await monitorDependencies(scanResultsByPath, options);\n}\n\nexport async function generateMonitorDependenciesRequest(\n scanResult: ScanResult,\n options: Options,\n): Promise<MonitorDependenciesRequest> {\n // WARNING! This mutates the payload. The project name logic should be handled in the plugin.\n scanResult.name =\n options['project-name'] || config.PROJECT_NAME || scanResult.name;\n // WARNING! This mutates the payload. Policy logic should be in the plugin.\n const policy = await findAndLoadPolicyForScanResult(scanResult, options);\n if (policy !== undefined) {\n scanResult.policy = policy.toString();\n }\n\n return {\n scanResult,\n method: 'cli',\n projectName: options['project-name'] || config.PROJECT_NAME || undefined,\n tags: generateTags(options),\n attributes: generateProjectAttributes(options),\n };\n}\n\nasync function monitorDependencies(\n scans: {\n [dir: string]: ScanResult[];\n },\n options: Options,\n): Promise<[EcosystemMonitorResult[], EcosystemMonitorError[]]> {\n const results: EcosystemMonitorResult[] = [];\n const errors: EcosystemMonitorError[] = [];\n for (const [path, scanResults] of Object.entries(scans)) {\n await spinner(`Monitoring dependencies in ${path}`);\n for (const scanResult of scanResults) {\n const monitorDependenciesRequest = await generateMonitorDependenciesRequest(\n scanResult,\n options,\n );\n\n const configOrg = config.org ? decodeURIComponent(config.org) : undefined;\n\n const payload = {\n method: 'PUT',\n url: `${config.API}/monitor-dependencies`,\n json: true,\n headers: {\n 'x-is-ci': isCI(),\n authorization: getAuthHeader(),\n },\n body: monitorDependenciesRequest,\n qs: {\n org: options.org || configOrg,\n },\n };\n try {\n const response = await makeRequest<MonitorDependenciesResponse>(\n payload,\n );\n results.push({\n ...response,\n path,\n scanResult,\n });\n } catch (error) {\n if (error.code === 401) {\n throw AuthFailedError();\n }\n if (error.code >= 400 && error.code < 500) {\n throw new MonitorError(error.code, error.message);\n }\n errors.push({\n error: 'Could not monitor dependencies in ' + path,\n path,\n scanResult,\n });\n }\n }\n spinner.clearAll();\n }\n return [results, errors];\n}\n\nexport async function getFormattedMonitorOutput(\n results: Array<GoodResult | BadResult>,\n monitorResults: EcosystemMonitorResult[],\n errors: EcosystemMonitorError[],\n options: Options,\n): Promise<string> {\n for (const monitorResult of monitorResults) {\n let monOutput = '';\n if (monitorResult.ok) {\n monOutput = formatMonitorOutput(\n monitorResult.scanResult.identity.type,\n monitorResult as MonitorResult,\n options,\n monitorResult.projectName,\n await getExtraProjectCount(\n monitorResult.path,\n options,\n // TODO: Fix to pass the old \"inspectResult.plugin.meta.allSubProjectNames\", which ecosystem uses this?\n // \"allSubProjectNames\" can become a Fact returned by a plugin.\n {} as InspectResult,\n ),\n );\n } else {\n monOutput = formatErrorMonitorOutput(\n monitorResult.scanResult.identity.type,\n monitorResult as MonitorResult,\n options,\n );\n }\n results.push({\n ok: true,\n data: monOutput,\n path: monitorResult.path,\n projectName: monitorResult.id,\n });\n }\n for (const monitorError of errors) {\n results.push({\n ok: false,\n data: new MonitorError(500, monitorError.error),\n path: monitorError.path,\n });\n }\n\n const outputString = results\n .map((res) => {\n if (res.ok) {\n return res.data;\n }\n\n const errorMessage =\n res.data && res.data.userMessage\n ? chalk.bold.red(res.data.userMessage)\n : res.data\n ? res.data.message\n : 'Unknown error occurred.';\n\n return (\n chalk.bold.white('\\nMonitoring ' + res.path + '...\\n\\n') + errorMessage\n );\n })\n .join('\\n' + SEPARATOR);\n\n if (results.every((res) => res.ok)) {\n return outputString;\n }\n\n throw new Error(outputString);\n}\n","import { Analytics } from './types';\nimport * as analytics from '../../lib/analytics';\n\nexport function extractAndApplyPluginAnalytics(\n pluginAnalytics: Analytics[],\n asyncRequestToken?: string,\n): void {\n if (asyncRequestToken) {\n analytics.add('asyncRequestToken', asyncRequestToken);\n }\n for (const { name, data } of pluginAnalytics) {\n analytics.add(name, data);\n }\n}\n","import * as cppPlugin from 'snyk-cpp-plugin';\nimport * as dockerPlugin from 'snyk-docker-plugin';\nimport { codePlugin } from '../plugins/sast';\nimport { Ecosystem, EcosystemPlugin } from './types';\n\nconst EcosystemPlugins: {\n readonly [ecosystem in Ecosystem]: EcosystemPlugin;\n} = {\n cpp: cppPlugin as EcosystemPlugin,\n // TODO: not any\n docker: dockerPlugin as any,\n code: codePlugin,\n};\n\nexport function getPlugin(ecosystem: Ecosystem): EcosystemPlugin {\n return EcosystemPlugins[ecosystem];\n}\n","import * as path from 'path';\n\nimport { SupportedPackageManagers } from '../package-managers';\nimport { findAndLoadPolicy } from '../policy';\nimport { Options, PolicyOptions } from '../types';\nimport { Issue, IssuesData, ScanResult } from './types';\nimport { Policy } from '../policy/find-and-load-policy';\n\nexport async function findAndLoadPolicyForScanResult(\n scanResult: ScanResult,\n options: Options & PolicyOptions,\n): Promise<object | undefined> {\n const targetFileRelativePath = scanResult.identity.targetFile\n ? path.join(path.resolve(`${options.path}`), scanResult.identity.targetFile)\n : undefined;\n const targetFileDir = targetFileRelativePath\n ? path.parse(targetFileRelativePath).dir\n : undefined;\n const scanType = options.docker\n ? 'docker'\n : (scanResult.identity.type as SupportedPackageManagers);\n // TODO: fix this and send only send when we used resolve-deps for node\n // it should be a ExpandedPkgTree type instead\n const packageExpanded = undefined;\n\n const policy = (await findAndLoadPolicy(\n options.path,\n scanType,\n options,\n packageExpanded,\n targetFileDir,\n )) as object | undefined; // TODO: findAndLoadPolicy() does not return a string!\n return policy;\n}\n\nexport function filterIgnoredIssues(\n issues: Issue[],\n issuesData: IssuesData,\n policy?: Policy,\n): [Issue[], IssuesData] {\n if (!policy?.ignore) {\n return [issues, issuesData];\n }\n\n const filteredIssuesData: IssuesData = { ...issuesData };\n const filteredIssues: Issue[] = issues.filter((issue) => {\n const ignoredIssue = policy.ignore[issue.issueId];\n if (!ignoredIssue) {\n return true;\n }\n\n const allResourcesRule = ignoredIssue.find((element) => '*' in element);\n if (!allResourcesRule) {\n return true;\n }\n\n const expiredIgnoreRule =\n new Date(allResourcesRule['*'].expires) < new Date();\n if (!expiredIgnoreRule) {\n delete filteredIssuesData[issue.issueId];\n return false;\n }\n\n return true;\n });\n\n return [filteredIssues, filteredIssuesData];\n}\n","import { Contributor, Options } from '../types';\nimport { spinner } from '../../lib/spinner';\nimport {\n ScanResult,\n EcosystemMonitorError,\n EcosystemMonitorResult,\n} from './types';\nimport {\n requestMonitorPollingToken,\n pollingMonitorWithTokenUntilDone,\n} from '../polling/polling-monitor';\nimport { extractAndApplyPluginAnalytics } from './plugin-analytics';\nimport { AuthFailedError, MonitorError } from '../errors';\nimport { extractResolutionMetaFromScanResult } from '../polling/common';\n\nexport async function resolveAndMonitorFacts(\n scans: {\n [dir: string]: ScanResult[];\n },\n options: Options,\n contributors?: Contributor[],\n): Promise<[EcosystemMonitorResult[], EcosystemMonitorError[]]> {\n const results: EcosystemMonitorResult[] = [];\n const errors: EcosystemMonitorError[] = [];\n\n for (const [path, scanResults] of Object.entries(scans)) {\n await spinner(`Resolving and Monitoring fileSignatures in ${path}`);\n for (const scanResult of scanResults) {\n try {\n const res = await requestMonitorPollingToken(options, true, scanResult);\n if (scanResult.analytics) {\n extractAndApplyPluginAnalytics(scanResult.analytics, res.token);\n }\n const resolutionMeta = extractResolutionMetaFromScanResult(scanResult);\n const { maxAttempts, pollInterval } = res.pollingTask;\n const attemptsCount = 0;\n const response = await pollingMonitorWithTokenUntilDone(\n res.token,\n true,\n options,\n pollInterval,\n attemptsCount,\n maxAttempts,\n resolutionMeta,\n contributors,\n );\n\n const ecosystemMonitorResult: EcosystemMonitorResult = {\n ...response,\n path,\n scanResult,\n };\n\n results.push(ecosystemMonitorResult);\n } catch (error) {\n if (error.code === 401) {\n throw AuthFailedError();\n }\n\n if (error.code >= 400 && error.code < 500) {\n throw new MonitorError(error.code, error.message);\n }\n errors.push({\n error: 'Could not monitor dependencies in ' + path,\n path,\n scanResult,\n });\n }\n }\n spinner.clearAll();\n }\n\n return [results, errors];\n}\n","import { Options, PolicyOptions } from '../types';\nimport { spinner } from '../../lib/spinner';\nimport { Ecosystem, ScanResult, TestResult } from './types';\nimport {\n requestTestPollingToken,\n pollingTestWithTokenUntilDone,\n} from '../polling/polling-test';\nimport { extractAndApplyPluginAnalytics } from './plugin-analytics';\nimport { findAndLoadPolicy } from '../policy';\nimport { filterIgnoredIssues } from './policy';\n\nexport async function resolveAndTestFacts(\n ecosystem: Ecosystem,\n scans: {\n [dir: string]: ScanResult[];\n },\n options: Options & PolicyOptions,\n): Promise<[TestResult[], string[]]> {\n const results: any[] = [];\n const errors: string[] = [];\n\n for (const [path, scanResults] of Object.entries(scans)) {\n await spinner(`Resolving and Testing fileSignatures in ${path}`);\n for (const scanResult of scanResults) {\n try {\n const res = await requestTestPollingToken(options, true, scanResult);\n if (scanResult.analytics) {\n extractAndApplyPluginAnalytics(scanResult.analytics, res.token);\n }\n const { maxAttempts, pollInterval } = res.pollingTask;\n const attemptsCount = 0;\n const response = await pollingTestWithTokenUntilDone(\n res.token,\n ecosystem,\n options,\n pollInterval,\n attemptsCount,\n maxAttempts,\n );\n\n const policy = await findAndLoadPolicy(path, 'cpp', options);\n const [issues, issuesData] = filterIgnoredIssues(\n response.issues,\n response.issuesData,\n policy,\n );\n\n results.push({\n issues,\n issuesData,\n depGraphData: response?.depGraphData,\n depsFilePaths: response?.depsFilePaths,\n fileSignaturesDetails: response?.fileSignaturesDetails,\n });\n } catch (error) {\n const hasStatusCodeError = error.code >= 400 && error.code <= 500;\n if (hasStatusCodeError) {\n errors.push(error.message);\n continue;\n }\n const failedPath = path ? `in ${path}` : '.';\n errors.push(`Could not test dependencies ${failedPath}`);\n }\n }\n }\n spinner.clearAll();\n return [results, errors];\n}\n","import config from '../config';\nimport { isCI } from '../is-ci';\nimport { makeRequest } from '../request/promise';\nimport { Options, PolicyOptions } from '../types';\nimport { TestCommandResult } from '../../cli/commands/types';\nimport { spinner } from '../../lib/spinner';\nimport { Ecosystem, ScanResult, TestResult } from './types';\nimport { getPlugin } from './plugins';\nimport { TestDependenciesResponse } from '../snyk-test/legacy';\nimport { assembleQueryString } from '../snyk-test/common';\nimport { getAuthHeader } from '../api-token';\nimport { resolveAndTestFacts } from './resolve-test-facts';\nimport { isUnmanagedEcosystem } from './common';\n\nexport async function testEcosystem(\n ecosystem: Ecosystem,\n paths: string[],\n options: Options & PolicyOptions,\n): Promise<TestCommandResult> {\n const plugin = getPlugin(ecosystem);\n // TODO: this is an intermediate step before consolidating ecosystem plugins\n // to accept flows that act differently in the testDependencies step\n if (plugin.test) {\n const { readableResult: res, sarifResult: sarifRes } = await plugin.test(\n paths,\n options,\n );\n return TestCommandResult.createHumanReadableTestCommandResult(\n res,\n '',\n sarifRes,\n );\n }\n const scanResultsByPath: { [dir: string]: ScanResult[] } = {};\n for (const path of paths) {\n await spinner(`Scanning dependencies in ${path}`);\n options.path = path;\n const pluginResponse = await plugin.scan(options);\n scanResultsByPath[path] = pluginResponse.scanResults;\n }\n spinner.clearAll();\n\n const [testResults, errors] = await selectAndExecuteTestStrategy(\n ecosystem,\n scanResultsByPath,\n options,\n );\n\n const stringifiedData = JSON.stringify(testResults, null, 2);\n if (options.json) {\n return TestCommandResult.createJsonTestCommandResult(stringifiedData);\n }\n const emptyResults: ScanResult[] = [];\n const scanResults = emptyResults.concat(...Object.values(scanResultsByPath));\n\n const readableResult = await plugin.display(\n scanResults,\n testResults,\n errors,\n options,\n );\n\n return TestCommandResult.createHumanReadableTestCommandResult(\n readableResult,\n stringifiedData,\n );\n}\n\nexport async function selectAndExecuteTestStrategy(\n ecosystem: Ecosystem,\n scanResultsByPath: { [dir: string]: ScanResult[] },\n options: Options & PolicyOptions,\n): Promise<[TestResult[], string[]]> {\n return isUnmanagedEcosystem(ecosystem)\n ? await resolveAndTestFacts(ecosystem, scanResultsByPath, options)\n : await testDependencies(scanResultsByPath, options);\n}\n\nasync function testDependencies(\n scans: {\n [dir: string]: ScanResult[];\n },\n options: Options,\n): Promise<[TestResult[], string[]]> {\n const results: TestResult[] = [];\n const errors: string[] = [];\n for (const [path, scanResults] of Object.entries(scans)) {\n await spinner(`Testing dependencies in ${path}`);\n for (const scanResult of scanResults) {\n const payload = {\n method: 'POST',\n url: `${config.API}/test-dependencies`,\n json: true,\n headers: {\n 'x-is-ci': isCI(),\n authorization: getAuthHeader(),\n },\n body: {\n scanResult,\n },\n qs: assembleQueryString(options),\n };\n try {\n const response = await makeRequest<TestDependenciesResponse>(payload);\n results.push({\n issues: response.result.issues,\n issuesData: response.result.issuesData,\n depGraphData: response.result.depGraphData,\n });\n } catch (error) {\n if (error.code >= 400 && error.code < 500) {\n throw new Error(error.message);\n }\n errors.push('Could not test dependencies in ' + path);\n }\n }\n }\n spinner.clearAll();\n return [results, errors];\n}\n","export function abridgeErrorMessage(\n msg: string,\n maxLen: number,\n ellipsis = ' ... ',\n): string {\n if (msg.length <= maxLen) {\n return msg;\n }\n const toKeep = Math.floor((maxLen - ellipsis.length) / 2);\n return (\n msg.slice(0, toKeep) + ellipsis + msg.slice(msg.length - toKeep, msg.length)\n );\n}\n","import { CustomError } from './custom-error';\n\nexport class InvalidRemoteUrlError extends CustomError {\n private static ERROR_MESSAGE =\n 'Invalid argument provided for --remote-repo-url. Value must be a string.';\n\n constructor() {\n super(InvalidRemoteUrlError.ERROR_MESSAGE);\n }\n}\n","import { makeRequest } from '../request';\nimport { getAuthHeader } from '../api-token';\nimport config from '../config';\nimport { assembleQueryString } from '../snyk-test/common';\nimport { OrgFeatureFlagResponse } from './types';\nimport { Options } from '../types';\nimport { AuthFailedError } from '../errors';\n\nexport async function isFeatureFlagSupportedForOrg(\n featureFlag: string,\n org,\n): Promise<OrgFeatureFlagResponse> {\n const response = await makeRequest({\n method: 'GET',\n headers: {\n Authorization: getAuthHeader(),\n },\n qs: assembleQueryString({ org }),\n url: `${config.API}/cli-config/feature-flags/${featureFlag}`,\n gzip: true,\n json: true,\n });\n\n return (response as any).body;\n}\n\nexport async function hasFeatureFlag(\n featureFlag: string,\n options: Options,\n): Promise<boolean | undefined> {\n const { code, error, ok } = await isFeatureFlagSupportedForOrg(\n featureFlag,\n options.org,\n );\n\n if (code === 401 || code === 403) {\n throw AuthFailedError(error, code);\n }\n return ok;\n}\n","import * as fs from 'fs';\nimport * as pathLib from 'path';\nconst sortBy = require('lodash.sortby');\nconst groupBy = require('lodash.groupby');\nimport { detectPackageManagerFromFile } from './detect';\nimport * as debugModule from 'debug';\nconst debug = debugModule('snyk:find-files');\n\n// TODO: use util.promisify once we move to node 8\n\n/**\n * Returns files inside given file path.\n *\n * @param path file path.\n */\nexport async function readDirectory(path: string): Promise<string[]> {\n return await new Promise((resolve, reject) => {\n fs.readdir(path, (err, files) => {\n if (err) {\n reject(err);\n }\n resolve(files);\n });\n });\n}\n\n/**\n * Returns file stats object for given file path.\n *\n * @param path path to file or directory.\n */\nexport async function getStats(path: string): Promise<fs.Stats> {\n return await new Promise((resolve, reject) => {\n fs.stat(path, (err, stats) => {\n if (err) {\n reject(err);\n }\n resolve(stats);\n });\n });\n}\n\ninterface FindFilesRes {\n files: string[];\n allFilesFound: string[];\n}\n\n/**\n * Find all files in given search path. Returns paths to files found.\n *\n * @param path file path to search.\n * @param ignore (optional) files to ignore. Will always ignore node_modules.\n * @param filter (optional) file names to find. If not provided all files are returned.\n * @param levelsDeep (optional) how many levels deep to search, defaults to two, this path and one sub directory.\n */\nexport async function find(\n path: string,\n ignore: string[] = [],\n filter: string[] = [],\n levelsDeep = 4,\n): Promise<FindFilesRes> {\n const found: string[] = [];\n const foundAll: string[] = [];\n\n // ensure we ignore find against node_modules path.\n if (path.endsWith('node_modules')) {\n return { files: found, allFilesFound: foundAll };\n }\n // ensure node_modules is always ignored\n if (!ignore.includes('node_modules')) {\n ignore.push('node_modules');\n }\n try {\n if (levelsDeep < 0) {\n return { files: found, allFilesFound: foundAll };\n } else {\n levelsDeep--;\n }\n const fileStats = await getStats(path);\n if (fileStats.isDirectory()) {\n const { files, allFilesFound } = await findInDirectory(\n path,\n ignore,\n filter,\n levelsDeep,\n );\n found.push(...files);\n foundAll.push(...allFilesFound);\n } else if (fileStats.isFile()) {\n const fileFound = findFile(path, filter);\n if (fileFound) {\n found.push(fileFound);\n foundAll.push(fileFound);\n }\n }\n const filteredOutFiles = foundAll.filter((f) => !found.includes(f));\n if (filteredOutFiles.length) {\n debug(\n `Filtered out ${filteredOutFiles.length}/${\n foundAll.length\n } files: ${filteredOutFiles.join(', ')}`,\n );\n }\n return { files: filterForDefaultManifests(found), allFilesFound: foundAll };\n } catch (err) {\n throw new Error(`Error finding files in path '${path}'.\\n${err.message}`);\n }\n}\n\nfunction findFile(path: string, filter: string[] = []): string | null {\n if (filter.length > 0) {\n const filename = pathLib.basename(path);\n if (filter.includes(filename)) {\n return path;\n }\n } else {\n return path;\n }\n return null;\n}\n\nasync function findInDirectory(\n path: string,\n ignore: string[] = [],\n filter: string[] = [],\n levelsDeep = 4,\n): Promise<FindFilesRes> {\n const files = await readDirectory(path);\n const toFind = files\n .filter((file) => !ignore.includes(file))\n .map((file) => {\n const resolvedPath = pathLib.resolve(path, file);\n if (!fs.existsSync(resolvedPath)) {\n debug('File does not seem to exist, skipping: ', file);\n return { files: [], allFilesFound: [] };\n }\n return find(resolvedPath, ignore, filter, levelsDeep);\n });\n\n const found = await Promise.all(toFind);\n return {\n files: Array.prototype.concat.apply(\n [],\n found.map((f) => f.files),\n ),\n allFilesFound: Array.prototype.concat.apply(\n [],\n found.map((f) => f.allFilesFound),\n ),\n };\n}\n\nfunction filterForDefaultManifests(files: string[]): string[] {\n // take all the files in the same dir & filter out\n // based on package Manager\n if (files.length <= 1) {\n return files;\n }\n\n const filteredFiles: string[] = [];\n\n const beforeSort = files\n .filter(Boolean)\n .filter((p) => fs.existsSync(p))\n .map((p) => ({\n path: p,\n ...pathLib.parse(p),\n packageManager: detectProjectTypeFromFile(p),\n }));\n const sorted = sortBy(beforeSort, 'dir');\n const foundFiles = groupBy(sorted, 'dir');\n\n for (const directory of Object.keys(foundFiles)) {\n const filesInDirectory = foundFiles[directory];\n const beforeGroup = filesInDirectory.filter((p) => !!p.packageManager);\n\n const groupedFiles = groupBy(beforeGroup, 'packageManager');\n\n for (const packageManager of Object.keys(groupedFiles)) {\n const filesPerPackageManager = groupedFiles[packageManager];\n\n if (filesPerPackageManager.length <= 1) {\n const shouldSkip = shouldSkipAddingFile(\n packageManager,\n filesPerPackageManager[0].path,\n filteredFiles,\n );\n if (shouldSkip) {\n continue;\n }\n filteredFiles.push(filesPerPackageManager[0].path);\n continue;\n }\n const defaultManifestFileName = chooseBestManifest(\n filesPerPackageManager,\n packageManager,\n );\n if (defaultManifestFileName) {\n const shouldSkip = shouldSkipAddingFile(\n packageManager,\n filesPerPackageManager[0].path,\n filteredFiles,\n );\n if (shouldSkip) {\n continue;\n }\n filteredFiles.push(defaultManifestFileName);\n }\n }\n }\n return filteredFiles;\n}\n\nfunction detectProjectTypeFromFile(file: string): string | null {\n try {\n const packageManager = detectPackageManagerFromFile(file);\n if (['yarn', 'npm'].includes(packageManager)) {\n return 'node';\n }\n return packageManager;\n } catch (error) {\n return null;\n }\n}\n\nfunction shouldSkipAddingFile(\n packageManager: string,\n filePath: string,\n filteredFiles: string[],\n): boolean {\n if (['gradle'].includes(packageManager) && filePath) {\n const rootGradleFile = filteredFiles\n .filter(\n (targetFile) =>\n targetFile.endsWith('build.gradle') ||\n targetFile.endsWith('build.gradle.kts'),\n )\n .filter((targetFile) => {\n const parsedPath = pathLib.parse(targetFile);\n const relativePath = pathLib.relative(parsedPath.dir, filePath);\n return !relativePath.startsWith(`..${pathLib.sep}`);\n });\n return !!rootGradleFile.length;\n }\n return false;\n}\n\nfunction chooseBestManifest(\n files: Array<{ base: string; path: string }>,\n projectType: string,\n): string | null {\n switch (projectType) {\n case 'node': {\n const lockFile = files.filter((path) =>\n ['package-lock.json', 'yarn.lock'].includes(path.base),\n )[0];\n debug(\n `Encountered multiple node lockfiles files, defaulting to ${lockFile.path}`,\n );\n if (lockFile) {\n return lockFile.path;\n }\n const packageJson = files.filter((path) =>\n ['package.json'].includes(path.base),\n )[0];\n debug(\n `Encountered multiple npm manifest files, defaulting to ${packageJson.path}`,\n );\n return packageJson.path;\n }\n case 'rubygems': {\n const defaultManifest = files.filter((path) =>\n ['Gemfile.lock'].includes(path.base),\n )[0];\n debug(\n `Encountered multiple gem manifest files, defaulting to ${defaultManifest.path}`,\n );\n return defaultManifest.path;\n }\n case 'cocoapods': {\n const defaultManifest = files.filter((path) =>\n ['Podfile'].includes(path.base),\n )[0];\n debug(\n `Encountered multiple cocoapods manifest files, defaulting to ${defaultManifest.path}`,\n );\n return defaultManifest.path;\n }\n case 'pip': {\n const defaultManifest = files.filter((path) =>\n ['Pipfile'].includes(path.base),\n )[0];\n debug(\n `Encountered multiple pip manifest files, defaulting to ${defaultManifest.path}`,\n );\n return defaultManifest.path;\n }\n case 'gradle': {\n const defaultManifest = files.filter((path) =>\n ['build.gradle'].includes(path.base),\n )[0];\n debug(\n `Encountered multiple gradle manifest files, defaulting to ${defaultManifest.path}`,\n );\n return defaultManifest.path;\n }\n case 'poetry': {\n const defaultManifest = files.filter((path) =>\n ['pyproject.toml'].includes(path.base),\n )[0];\n debug(\n `Encountered multiple poetry manifest files, defaulting to ${defaultManifest.path}`,\n );\n return defaultManifest.path;\n }\n case 'hex': {\n const defaultManifest = files.filter((path) =>\n ['mix.exs'].includes(path.base),\n )[0];\n debug(\n `Encountered multiple hex manifest files, defaulting to ${defaultManifest.path}`,\n );\n return defaultManifest.path;\n }\n default: {\n return null;\n }\n }\n}\n","import chalk from 'chalk';\nimport {\n TestResult,\n BaseImageRemediationAdvice,\n} from '../../../lib/snyk-test/legacy';\n\nexport function dockerRemediationForDisplay(res: TestResult) {\n if (!res.docker || !res.docker.baseImageRemediation) {\n return '';\n }\n const { advice, message } = res.docker.baseImageRemediation;\n const out = [] as any[];\n\n if (advice) {\n for (const item of advice) {\n out.push(getTerminalStringFormatter(item)(item.message));\n }\n } else if (message) {\n out.push(message);\n } else {\n return '';\n }\n return `\\n\\n${out.join('\\n')}`;\n}\n\nfunction getTerminalStringFormatter({\n color,\n bold,\n}: BaseImageRemediationAdvice) {\n let formatter = chalk;\n if (color && formatter[color]) {\n formatter = formatter[color];\n }\n if (bold) {\n formatter = formatter.bold;\n }\n return formatter;\n}\n","const values = require('lodash.values');\nimport chalk from 'chalk';\n\nexport function createDockerBinaryHeading(pkgInfo): string {\n const binaryName = pkgInfo.pkg.name;\n const binaryVersion = pkgInfo.pkg.version;\n const numOfVulns = values(pkgInfo.issues).length;\n const vulnCountText = numOfVulns > 1 ? 'vulnerabilities' : 'vulnerability';\n return numOfVulns\n ? chalk.bold.white(\n `------------ Detected ${numOfVulns} ${vulnCountText}` +\n ` for ${binaryName}@${binaryVersion} ------------`,\n '\\n',\n )\n : '';\n}\n","const values = require('lodash.values');\nimport { createDockerBinaryHeading } from './format-docker-binary-heading';\nimport { Options, TestOptions } from '../../../lib/types';\nimport { formatIssues } from '../legacy-format-issue';\n\nexport function formatDockerBinariesIssues(\n dockerBinariesSortedGroupedVulns,\n binariesVulns,\n options: Options & TestOptions,\n): string[] {\n const binariesIssuesOutput = [] as string[];\n for (const pkgInfo of values(binariesVulns.affectedPkgs)) {\n binariesIssuesOutput.push(createDockerBinaryHeading(pkgInfo));\n const binaryIssues = dockerBinariesSortedGroupedVulns.filter(\n (vuln) => vuln.metadata.name === pkgInfo.pkg.name,\n );\n const formattedBinaryIssues = binaryIssues.map((vuln) =>\n formatIssues(vuln, options),\n );\n binariesIssuesOutput.push(formattedBinaryIssues.join('\\n\\n'));\n }\n return binariesIssuesOutput;\n}\n","export { dockerRemediationForDisplay } from './format-docker-advice';\nexport { formatDockerBinariesIssues } from './format-docker-binary-issues';\nexport { createDockerBinaryHeading } from './format-docker-binary-heading';\n","import { errorMessageWithRetry } from '../errors';\n\nexport function summariseErrorResults(errorResultsLength: number): string {\n const projects = errorResultsLength > 1 ? 'projects' : 'project';\n if (errorResultsLength > 0) {\n return errorMessageWithRetry(\n ` Failed to test ${errorResultsLength} ${projects}.`,\n );\n }\n\n return '';\n}\n","const assign = require('lodash.assign');\nimport chalk from 'chalk';\nimport * as url from 'url';\n\nimport { MonitorResult } from '../types';\nimport config from '../config';\nimport { showMultiScanTip } from './show-multi-scan-tip';\n\nexport function formatErrorMonitorOutput(\n packageManager,\n res: MonitorResult,\n options,\n projectName?: string,\n): string {\n const humanReadableName = projectName\n ? `${res.path} (${projectName})`\n : res.path;\n const strOutput =\n chalk.bold.white('\\nMonitoring ' + humanReadableName + '...\\n\\n') +\n '\\n\\n' +\n (packageManager === 'maven'\n ? chalk.yellow('Detected 0 dependencies (no project created)')\n : '');\n return options.json\n ? JSON.stringify(\n assign({}, res, {\n packageManager,\n }),\n )\n : strOutput;\n}\n\nexport function formatMonitorOutput(\n packageManager,\n res: MonitorResult,\n options,\n projectName?: string,\n foundProjectCount?: number,\n): string {\n const manageUrl = buildManageUrl(res.id, res.org);\n const multiScanTip = showMultiScanTip(\n packageManager,\n options,\n foundProjectCount,\n );\n const issues = res.licensesPolicy ? 'issues' : 'vulnerabilities';\n const humanReadableName = projectName\n ? `${res.path} (${projectName})`\n : res.path;\n const strOutput =\n chalk.bold.white('\\nMonitoring ' + humanReadableName + '...\\n\\n') +\n 'Explore this snapshot at ' +\n res.uri +\n '\\n\\n' +\n (multiScanTip ? `${multiScanTip}\\n\\n` : '') +\n (res.isMonitored\n ? 'Notifications about newly disclosed ' +\n issues +\n ' related ' +\n 'to these dependencies will be emailed to you.\\n'\n : chalk.bold.red(\n 'Project is inactive, so notifications are turned ' +\n 'off.\\nActivate this project here: ' +\n manageUrl +\n '\\n\\n',\n )) +\n (res.trialStarted\n ? chalk.yellow(\n \"You're over the free plan usage limit, \\n\" +\n 'and are now on a free 14-day premium trial.\\n' +\n 'View plans here: ' +\n manageUrl +\n '\\n\\n',\n )\n : '');\n\n return options.json\n ? JSON.stringify(\n assign({}, res, {\n manageUrl,\n packageManager,\n }),\n )\n : strOutput;\n}\n\nfunction buildManageUrl(resId: string, org?: string): string {\n const endpoint = url.parse(config.API);\n let leader = '';\n if (org) {\n leader = '/org/' + org;\n }\n endpoint.pathname = leader + '/manage';\n const manageUrl = url.format(endpoint);\n\n // TODO: what was this meant to do?\n endpoint.pathname = leader + '/monitor/' + resId;\n return manageUrl;\n}\n","import * as wrap from 'wrap-ansi';\nimport chalk from 'chalk';\n\nimport {\n AnnotatedIssue,\n CallPath,\n REACHABILITY,\n} from '../../lib/snyk-test/legacy';\nimport { SampleReachablePaths } from './types';\nimport {\n CALL_PATH_LEADING_ELEMENTS,\n PATH_SEPARATOR,\n CALL_PATH_TRAILING_ELEMENTS,\n PATH_HIDDEN_ELEMENTS,\n} from '../constants';\n\nconst reachabilityLevels: {\n [key in REACHABILITY]: { color: Function; text: string; json: string };\n} = {\n [REACHABILITY.FUNCTION]: {\n color: chalk.redBright,\n text: 'Reachable',\n json: 'reachable',\n },\n [REACHABILITY.PACKAGE]: {\n color: chalk.yellow,\n text: 'Potentially reachable',\n json: 'potentially-reachable',\n },\n [REACHABILITY.NOT_REACHABLE]: {\n color: chalk.blueBright,\n text: 'Not reachable',\n json: 'not-reachable',\n },\n [REACHABILITY.NO_INFO]: {\n color: (str) => str,\n text: '',\n json: 'no-path-found',\n },\n};\n\nexport function formatReachability(reachability?: REACHABILITY): string {\n if (!reachability) {\n return '';\n }\n const reachableInfo = reachabilityLevels[reachability];\n const textFunc = reachableInfo ? reachableInfo.color : (str) => str;\n const text =\n reachableInfo && reachableInfo.text ? `[${reachableInfo.text}]` : '';\n\n return wrap(textFunc(text), 100);\n}\n\nexport function getReachabilityText(reachability?: REACHABILITY): string {\n if (!reachability) {\n return '';\n }\n const reachableInfo = reachabilityLevels[reachability];\n return reachableInfo ? reachableInfo.text : '';\n}\n\nexport function getReachabilityJson(reachability?: REACHABILITY): string {\n if (!reachability) {\n return '';\n }\n const reachableInfo = reachabilityLevels[reachability];\n return reachableInfo ? reachableInfo.json : '';\n}\n\nexport function summariseReachableVulns(\n vulnerabilities: AnnotatedIssue[],\n): string {\n const reachableVulnsCount = vulnerabilities.filter(\n (v) => v.reachability === REACHABILITY.FUNCTION,\n ).length;\n\n if (reachableVulnsCount > 0) {\n const vulnText =\n reachableVulnsCount === 1 ? 'vulnerability' : 'vulnerabilities';\n return `In addition, found ${reachableVulnsCount} ${vulnText} with a reachable path.`;\n }\n\n return '';\n}\n\nfunction getDistinctReachablePaths(\n reachablePaths: CallPath[],\n maxPathCount: number,\n): string[] {\n const uniquePaths = new Set<string>();\n for (const path of reachablePaths) {\n if (uniquePaths.size >= maxPathCount) {\n break;\n }\n uniquePaths.add(formatReachablePath(path));\n }\n return Array.from(uniquePaths.values());\n}\n\nexport function formatReachablePaths(\n sampleReachablePaths: SampleReachablePaths | undefined,\n maxPathCount: number,\n template: (samplePaths: string[], extraPathsCount: number) => string,\n): string {\n const paths = sampleReachablePaths?.paths || [];\n const pathCount = sampleReachablePaths?.pathCount || 0;\n const distinctPaths = getDistinctReachablePaths(paths, maxPathCount);\n const extraPaths = pathCount - distinctPaths.length;\n\n return template(distinctPaths, extraPaths);\n}\n\nexport function formatReachablePath(path: CallPath): string {\n const head = path.slice(0, CALL_PATH_LEADING_ELEMENTS).join(PATH_SEPARATOR);\n const tail = path\n .slice(path.length - CALL_PATH_TRAILING_ELEMENTS, path.length)\n .join(PATH_SEPARATOR);\n return `${head}${PATH_SEPARATOR}${PATH_HIDDEN_ELEMENTS}${PATH_SEPARATOR}${tail}`;\n}\n","import chalk from 'chalk';\nimport { rightPadWithSpaces } from '../../lib/right-pad';\nimport { TestOptions, Options } from '../../lib/types';\nimport { TestResult } from '../../lib/snyk-test/legacy';\nimport { IacTestResponse } from '../../lib/snyk-test/iac-test-result';\nimport { capitalizePackageManager } from './iac-output';\n\nexport function formatTestMeta(\n res: TestResult | IacTestResponse,\n options: Options & TestOptions,\n): string {\n const padToLength = 19; // chars to align\n const packageManager = res.packageManager || options.packageManager;\n const targetFile = res.targetFile || res.displayTargetFile || options.file;\n const openSource = res.isPrivate ? 'no' : 'yes';\n const meta = res.org\n ? [chalk.bold(rightPadWithSpaces('Organization: ', padToLength)) + res.org]\n : [];\n if (options.iac) {\n meta.push(\n chalk.bold(rightPadWithSpaces('Type: ', padToLength)) +\n capitalizePackageManager(packageManager),\n );\n } else {\n meta.push(\n chalk.bold(rightPadWithSpaces('Package manager: ', padToLength)) +\n packageManager,\n );\n }\n if (targetFile) {\n meta.push(\n chalk.bold(rightPadWithSpaces('Target file: ', padToLength)) + targetFile,\n );\n }\n if (res.projectName) {\n meta.push(\n chalk.bold(rightPadWithSpaces('Project name: ', padToLength)) +\n res.projectName,\n );\n }\n if (options.docker) {\n meta.push(\n chalk.bold(rightPadWithSpaces('Docker image: ', padToLength)) +\n options.path,\n );\n\n if (res.platform) {\n meta.push(\n chalk.bold(rightPadWithSpaces('Platform: ', padToLength)) +\n res.platform,\n );\n }\n } else {\n meta.push(\n chalk.bold(rightPadWithSpaces('Open source: ', padToLength)) + openSource,\n );\n meta.push(\n chalk.bold(rightPadWithSpaces('Project path: ', padToLength)) +\n options.path,\n );\n }\n if (res.payloadType !== 'k8sconfig') {\n const legacyRes: TestResult = res as TestResult;\n if (legacyRes.docker && legacyRes.docker.baseImage) {\n meta.push(\n chalk.bold(rightPadWithSpaces('Base image: ', padToLength)) +\n legacyRes.docker.baseImage,\n );\n }\n\n if (legacyRes.filesystemPolicy) {\n meta.push(\n chalk.bold(rightPadWithSpaces('Local Snyk policy: ', padToLength)) +\n chalk.green('found'),\n );\n if (\n legacyRes.ignoreSettings &&\n legacyRes.ignoreSettings.disregardFilesystemIgnores\n ) {\n meta.push(\n chalk.bold(\n rightPadWithSpaces('Local Snyk policy ignored: ', padToLength),\n ) + chalk.red('yes'),\n );\n }\n }\n if (legacyRes.licensesPolicy) {\n meta.push(\n chalk.bold(rightPadWithSpaces('Licenses: ', padToLength)) +\n chalk.green('enabled'),\n );\n }\n }\n\n return meta.join('\\n');\n}\n","import { Options, TestOptions } from '../../lib/types';\n\nexport function summariseVulnerableResults(\n vulnerableResults,\n options: Options & TestOptions,\n): string {\n const vulnsLength = vulnerableResults.length;\n if (vulnsLength) {\n if (options.showVulnPaths) {\n return `, ${vulnsLength} contained ${\n options.iac ? 'issues' : 'vulnerable paths'\n }.`;\n }\n return `, ${vulnsLength} had issues.`;\n }\n\n if (options.showVulnPaths) {\n return ', no vulnerable paths were found.';\n }\n\n return ', no issues were found.';\n}\n","import { SEVERITIES, SEVERITY } from '../snyk-test/common';\n\nexport function getSeverityValue(severity: SEVERITY | 'none'): number {\n return SEVERITIES.find((s) => s.verboseName === severity)!.value;\n}\n","export {\n capitalizePackageManager,\n createSarifOutputForIac,\n shareResultsOutput,\n getIacDisplayedOutput,\n getIacDisplayErrorFileOutput,\n} from './v1';\n\nexport {\n formatIacTestSummary,\n getIacDisplayedIssues,\n formatIacTestFailures,\n iacTestTitle,\n spinnerMessage,\n spinnerSuccessMessage,\n customRulesMessage,\n customRulesReportMessage,\n shouldLogUserMessages,\n formatShareResultsOutput,\n failuresTipOutput,\n} from './v2';\n","import chalk from 'chalk';\nimport { icon } from '../../../theme';\nimport * as Debug from 'debug';\nimport * as pathLib from 'path';\nimport { pathToFileURL } from 'url';\nimport * as upperFirst from 'lodash.upperfirst';\nimport * as camelCase from 'lodash.camelcase';\n\nimport {\n IacTestResponse,\n AnnotatedIacIssue,\n} from '../../../../lib/snyk-test/iac-test-result';\nimport { printPath } from '../../remediation-based-format-issues';\nimport { titleCaseText } from '../../legacy-format-issue';\nimport * as sarif from 'sarif';\nimport { colorTextBySeverity } from '../../../../lib/snyk-test/common';\nimport { IacFileInDirectory, IacOutputMeta } from '../../../../lib/types';\nimport { isLocalFolder } from '../../../../lib/detect';\nimport { getSeverityValue } from '../../get-severity-value';\nimport { getIssueLevel } from '../../sarif-output';\nimport { getVersion } from '../../../version';\nimport config from '../../../config';\nimport { getRepositoryRoot } from '../../../iac/git';\nconst debug = Debug('iac-output');\n\nfunction formatIacIssue(\n issue: AnnotatedIacIssue,\n isNew: boolean,\n path: string[],\n): string {\n const newBadge = isNew ? ' (new)' : '';\n const name = issue.subType ? ` in ${chalk.bold(issue.subType)}` : '';\n\n let introducedBy = '';\n if (path) {\n // In this mode, we show only one path by default, for compactness\n const pathStr = printPath(path, 0);\n introducedBy = `\\n introduced by ${pathStr}`;\n }\n\n return (\n colorTextBySeverity(\n issue.severity,\n ` ${icon.ISSUE} ${chalk.bold(issue.title)}${newBadge} [${titleCaseText(\n issue.severity,\n )} Severity]`,\n ) +\n ` [${issue.id}]` +\n name +\n introducedBy +\n '\\n'\n );\n}\n\nexport function getIacDisplayedOutput(\n iacTest: IacTestResponse,\n testedInfoText: string,\n meta: string,\n prefix: string,\n): string {\n const issuesTextArray = [\n chalk.bold.white('\\nInfrastructure as code issues:'),\n ];\n\n const NotNew = false;\n\n const issues: AnnotatedIacIssue[] = iacTest.result.cloudConfigResults;\n debug(`iac display output - ${issues.length} issues`);\n\n issues\n .sort((a, b) => getSeverityValue(b.severity) - getSeverityValue(a.severity))\n .forEach((issue) => {\n issuesTextArray.push(\n formatIacIssue(issue, NotNew, issue.cloudConfigPath),\n );\n });\n\n const issuesInfoOutput: string[] = [];\n debug(`Iac display output - ${issuesTextArray.length} issues text`);\n if (issuesTextArray.length > 0) {\n issuesInfoOutput.push(issuesTextArray.join('\\n'));\n }\n\n let body = issuesInfoOutput.join('\\n\\n') + '\\n\\n' + meta;\n\n const vulnCountText = `found ${issues.length} issues`;\n const summary = testedInfoText + ', ' + chalk.red.bold(vulnCountText);\n\n body = body + '\\n\\n' + summary;\n\n return prefix + body;\n}\n\nexport function getIacDisplayErrorFileOutput(\n iacFileResult: IacFileInDirectory,\n): string {\n const fileName = pathLib.basename(iacFileResult.filePath);\n return `\n\n-------------------------------------------------------\n\nTesting ${fileName}...\n\n${iacFileResult.failureReason}`;\n}\n\nexport function capitalizePackageManager(type: string | undefined) {\n switch (type) {\n case 'k8sconfig': {\n return 'Kubernetes';\n }\n case 'helmconfig': {\n return 'Helm';\n }\n case 'terraformconfig': {\n return 'Terraform';\n }\n case 'cloudformationconfig': {\n return 'CloudFormation';\n }\n case 'armconfig': {\n return 'ARM';\n }\n default: {\n return 'Infrastructure as Code';\n }\n }\n}\n\ntype ResponseIssues = { issue: AnnotatedIacIssue; targetPath: string }[];\n\n// Used to reference the base path in results.\nconst PROJECT_ROOT_KEY = 'PROJECTROOT';\n\nexport function createSarifOutputForIac(\n iacTestResponses: IacTestResponse[],\n): sarif.Log {\n // If the CLI scans a singular file, then the base path is the current working directory\n // Otherwise it's the computed path\n const basePath = isLocalFolder(iacTestResponses[0].path)\n ? pathLib.resolve('.', iacTestResponses[0].path)\n : pathLib.resolve('.');\n let repoRoot: string;\n try {\n repoRoot = getRepositoryRoot() + '/';\n } catch {\n repoRoot = pathLib.join(basePath, '/'); // the slash at the end is required, otherwise the artifactLocation.uri starts with a slash\n }\n const issues = iacTestResponses.reduce((collect: ResponseIssues, res) => {\n if (res.result) {\n // targetFile is the computed relative path of the scanned file\n // so needs to be cleaned up before assigning to the URI\n const targetPath = getPathRelativeToRepoRoot(\n repoRoot,\n basePath,\n res.targetFile,\n );\n const mapped = res.result.cloudConfigResults.map((issue) => ({\n issue,\n targetPath,\n }));\n collect.push(...mapped);\n }\n return collect;\n }, []);\n\n const tool: sarif.Tool = {\n driver: {\n name: 'Snyk IaC',\n fullName: 'Snyk Infrastructure as Code',\n version: getVersion(),\n informationUri:\n 'https://docs.snyk.io/products/snyk-infrastructure-as-code',\n rules: extractReportingDescriptor(issues),\n },\n };\n return {\n $schema:\n 'https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json',\n version: '2.1.0',\n runs: [\n {\n // https://docs.oasis-open.org/sarif/sarif/v2.1.0/os/sarif-v2.1.0-os.html#_Toc34317498\n originalUriBaseIds: {\n [PROJECT_ROOT_KEY]: {\n uri: pathToFileURL(repoRoot).href,\n description: {\n text: 'The root directory for all project files.',\n },\n },\n },\n\n tool,\n automationDetails: {\n id: 'snyk-iac',\n },\n results: mapIacTestResponseToSarifResults(issues),\n },\n ],\n };\n}\n\nexport function extractReportingDescriptor(\n results: ResponseIssues,\n): sarif.ReportingDescriptor[] {\n const tool: Record<string, sarif.ReportingDescriptor> = {};\n\n results.forEach(({ issue }) => {\n if (tool[issue.id]) {\n return;\n }\n // custom rules may not have some of these fields so we check them first\n const fullDescriptionText = issue.subType\n ? `${upperFirst(issue.severity)} severity - ${issue.subType}`\n : `${upperFirst(issue.severity)} severity`;\n const issueText = issue.iacDescription.issue\n ? `The issue is... \\n${issue.iacDescription.issue}\\n\\n`\n : '';\n const issueMarkdown = issue.iacDescription.issue\n ? `**The issue is...** \\n${issue.iacDescription.issue}\\n\\n`\n : '';\n const impactText = issue.iacDescription.impact\n ? ` The impact of this is... \\n ${issue.iacDescription.impact}\\n\\n`\n : '';\n const impactMarkdown = issue.iacDescription.impact\n ? ` **The impact of this is...** \\n ${issue.iacDescription.impact}\\n\\n`\n : '';\n const resolveText = issue.iacDescription.resolve\n ? ` You can resolve this by... \\n${issue.iacDescription.resolve}`\n : '';\n const resolveMarkdown = issue.iacDescription.resolve\n ? ` **You can resolve this by...** \\n${issue.iacDescription.resolve}`\n : '';\n const tags = ['security'];\n if (issue.subType) {\n tags.push(issue.subType);\n }\n tool[issue.id] = {\n id: issue.id,\n name: upperFirst(camelCase(issue.title)).replace(/ /g, ''),\n shortDescription: {\n text: `${upperFirst(issue.severity)} severity - ${issue.title}`,\n },\n fullDescription: {\n text: fullDescriptionText,\n },\n help: {\n text: `${issueText}${impactText}${resolveText}`.replace(/^\\s+/g, ''),\n markdown: `${issueMarkdown}${impactMarkdown}${resolveMarkdown}`.replace(\n /^\\s+/g,\n '',\n ),\n },\n defaultConfiguration: {\n level: getIssueLevel(issue.severity),\n },\n properties: {\n tags,\n problem: {\n severity: issue.severity,\n },\n },\n helpUri: issue.documentation,\n };\n });\n\n return Object.values(tool);\n}\n\nexport function mapIacTestResponseToSarifResults(\n issues: ResponseIssues,\n): sarif.Result[] {\n return issues.map(({ targetPath, issue }) => {\n const hasLineNumber = issue.lineNumber && issue.lineNumber >= 0;\n // custom rules may not have some of these fields so we check them first\n const affectingText = issue.subType\n ? ` affecting the ${issue.subType}`\n : '';\n return {\n ruleId: issue.id,\n message: {\n text: `This line contains a potential ${issue.severity} severity misconfiguration${affectingText}`,\n },\n locations: [\n {\n physicalLocation: {\n artifactLocation: {\n uri: targetPath,\n uriBaseId: PROJECT_ROOT_KEY,\n },\n // We exclude the `region` key when the line number is missing or -1.\n // https://docs.oasis-open.org/sarif/sarif/v2.0/csprd02/sarif-v2.0-csprd02.html#_Toc10127873\n ...(hasLineNumber && {\n region: {\n startLine: issue.lineNumber,\n },\n }),\n },\n },\n ],\n };\n });\n}\n\nfunction getPathRelativeToRepoRoot(\n repoRoot: string,\n basePath: string,\n filePath: string,\n) {\n const fullPath = pathLib.resolve(basePath, filePath).replace(/\\\\/g, '/');\n return fullPath.replace(repoRoot, '');\n}\n\nexport function shareResultsOutput(iacOutputMeta: IacOutputMeta): string {\n let projectName: string = iacOutputMeta.projectName;\n if (iacOutputMeta?.gitRemoteUrl) {\n // from \"http://github.com/snyk/cli.git\" to \"snyk/cli\"\n projectName = iacOutputMeta.gitRemoteUrl.replace(\n /^https?:\\/\\/github.com\\/(.*)\\.git$/,\n '$1',\n );\n }\n return `Your test results are available at: ${config.ROOT}/org/${iacOutputMeta.orgName}/projects under the name ${projectName}`;\n}\n","export { formatIacTestFailures } from './list';\nexport { failuresTipOutput } from './tip';\n","import { EOL } from 'os';\n\nimport { IacFileInDirectory } from '../../../../types';\nimport { colors, contentPadding } from '../utils';\n\nexport function formatIacTestFailures(testFailures: IacFileInDirectory[]) {\n const sectionComponents: string[] = [];\n\n const titleOutput = colors.title(`Test Failures`);\n sectionComponents.push(titleOutput);\n\n const testFailuresListOutput = formatFailuresList(testFailures);\n sectionComponents.push(testFailuresListOutput);\n\n return sectionComponents.join(EOL.repeat(2));\n}\n\ninterface TestFailuresByFailureReason {\n [reason: string]: IacFileInDirectory[];\n}\n\nfunction groupTestFailuresByFailureReason(\n testFailures: IacFileInDirectory[],\n): TestFailuresByFailureReason {\n return testFailures.reduce((groupedFailures, failure) => {\n const reason = failure.failureReason;\n if (reason) {\n if (!groupedFailures[reason]) {\n groupedFailures[reason] = [];\n }\n\n groupedFailures[reason].push(failure);\n }\n\n return groupedFailures;\n }, {});\n}\n\nfunction formatFailuresList(testFailures: IacFileInDirectory[]) {\n const testFailuresByReason = groupTestFailuresByFailureReason(testFailures);\n return Object.entries(testFailuresByReason)\n .map(([failureReason, testFailures]) =>\n formatFailure(failureReason, testFailures),\n )\n .join(EOL.repeat(2));\n}\n\nfunction formatFailure(\n failureReason: string,\n testFailures: IacFileInDirectory[],\n): string {\n const pathPrefix = contentPadding + 'Path: ';\n const pathLeftPadding = ' '.repeat(pathPrefix.length);\n\n return (\n contentPadding +\n colors.failure.bold(failureReason) +\n EOL +\n pathPrefix +\n testFailures\n .map((testFailure) => testFailure.filePath)\n .join(EOL + pathLeftPadding)\n );\n}\n","import { EOL } from 'os';\nimport { contactSupportMessage, reTryMessage } from '../../../../common';\nimport { colors } from '../utils';\n\nexport const failuresTipOutput = colors.info.bold(\n reTryMessage + EOL + contactSupportMessage,\n);\n","export { getIacDisplayedIssues } from './issues-list';\nexport { formatIacTestSummary } from './test-summary';\nexport {\n iacTestTitle,\n spinnerMessage,\n spinnerSuccessMessage,\n shouldLogUserMessages,\n customRulesMessage,\n customRulesReportMessage,\n} from './user-messages';\nexport { formatShareResultsOutput } from './share-results';\nexport { formatIacTestFailures, failuresTipOutput } from './failures';\n","import { FormattedResult } from '../../../../../cli/commands/test/iac/local-execution/types';\nimport { IacOutputMeta } from '../../../../types';\nimport { IacTestOutput } from './types';\n\nexport function formatScanResultsNewOutput(\n oldFormattedResults: FormattedResult[],\n outputMeta: IacOutputMeta,\n): IacTestOutput {\n const newFormattedResults: IacTestOutput = {\n results: {},\n metadata: outputMeta,\n };\n\n oldFormattedResults.forEach((oldFormattedResult) => {\n oldFormattedResult.result.cloudConfigResults.forEach((issue) => {\n if (!newFormattedResults.results[issue.severity]) {\n newFormattedResults.results[issue.severity] = [];\n }\n\n newFormattedResults.results[issue.severity].push({\n issue,\n targetFile: oldFormattedResult.targetFile,\n projectType: oldFormattedResult.result.projectType,\n });\n });\n });\n\n return newFormattedResults;\n}\n","import { EOL } from 'os';\nimport * as capitalize from 'lodash.capitalize';\nimport * as isEmpty from 'lodash.isempty';\nimport * as debug from 'debug';\n\nimport { IacOutputMeta } from '../../../../types';\nimport { colors, contentPadding } from '../utils';\nimport { formatScanResultsNewOutput } from './formatters';\nimport { formatIssue } from './issue';\nimport { SEVERITY } from '../../../../snyk-test/common';\nimport { FormattedOutputResult } from './types';\nimport { FormattedResult } from '../../../../../cli/commands/test/iac/local-execution/types';\n\nexport function getIacDisplayedIssues(\n results: FormattedResult[],\n outputMeta: IacOutputMeta,\n): string {\n const titleOutput = colors.info.bold('Issues');\n\n const formattedResults = formatScanResultsNewOutput(results, outputMeta);\n\n if (isEmpty(formattedResults.results)) {\n return (\n titleOutput +\n EOL +\n contentPadding +\n colors.success.bold('No vulnerable paths were found!')\n );\n }\n\n const severitySectionsOutput = Object.values(SEVERITY)\n .filter((severity) => !!formattedResults.results[severity])\n .map((severity) => {\n const severityResults: FormattedOutputResult[] =\n formattedResults.results[severity];\n\n const titleOutput = colors.title(\n `${capitalize(severity)} Severity Issues: ${severityResults.length}`,\n );\n\n const issuesOutput = severityResults\n .sort(\n (severityResult1, severityResult2) =>\n severityResult1.targetFile.localeCompare(\n severityResult2.targetFile,\n ) ||\n severityResult1.issue.id.localeCompare(severityResult2.issue.id),\n )\n .map(formatIssue)\n .join(EOL.repeat(2));\n\n debug(\n `iac display output - ${severity} severity ${severityResults.length} issues`,\n );\n\n return titleOutput + EOL.repeat(2) + issuesOutput;\n })\n .join(EOL.repeat(2));\n\n return titleOutput + EOL.repeat(2) + severitySectionsOutput;\n}\n","import * as capitalize from 'lodash.capitalize';\nimport chalk from 'chalk';\nimport { EOL } from 'os';\nimport { iacRemediationTypes } from '../../../../iac/constants';\n\nimport { printPath } from '../../../remediation-based-format-issues';\nimport { colors, contentPadding } from '../utils';\nimport { FormattedOutputResult } from './types';\nimport { AnnotatedIacIssue } from '../../../../snyk-test/iac-test-result';\n\nexport function formatIssue(result: FormattedOutputResult): string {\n const titleOutput = formatTitle(result.issue);\n\n const propertiesOutput = formatProperties(result);\n\n return (\n contentPadding +\n titleOutput +\n EOL +\n contentPadding +\n propertiesOutput.join(EOL + contentPadding)\n );\n}\n\nfunction formatTitle(issue: AnnotatedIacIssue): string {\n const severity = issue.severity;\n const titleOutput = colors.severities[severity](\n `[${capitalize([issue.severity])}] ${chalk.bold(issue.title)}`,\n );\n\n return titleOutput;\n}\n\nfunction formatProperties(result: FormattedOutputResult): string[] {\n const remediationKey = iacRemediationTypes?.[result.projectType];\n\n const properties = [\n [\n 'Info',\n `${result.issue.iacDescription.issue}${\n result.issue.iacDescription.issue.endsWith('.') ? '' : '.'\n } ${result.issue.iacDescription.impact}`,\n ],\n [\n 'Rule',\n result.issue.isGeneratedByCustomRule\n ? `custom rule ${result.issue.id}`\n : result.issue.documentation,\n ],\n ['Path', printPath(result.issue.cloudConfigPath, 0)],\n ['File', result.targetFile],\n [\n 'Resolve',\n remediationKey && result.issue.remediation?.[remediationKey]\n ? result.issue.remediation[remediationKey]\n : result.issue.iacDescription.resolve,\n ],\n ].filter(([, val]) => !!val) as [string, string][];\n\n const maxPropertyNameLength = Math.max(\n ...properties.map(([key]) => key.length),\n );\n\n return properties.map(\n ([key, value]) =>\n `${key}: ${' '.repeat(maxPropertyNameLength - key.length)}${value}`,\n );\n}\n","import { IacOutputMeta } from '../../../types';\nimport { shareResultsOutput } from '../v1';\nimport { colors } from './utils';\n\nexport function formatShareResultsOutput(outputMeta: IacOutputMeta) {\n return colors.info.bold(shareResultsOutput(outputMeta));\n}\n","import { EOL } from 'os';\nimport { rightPadWithSpaces } from '../../../right-pad';\nimport { SEVERITY } from '../../../snyk-test/common';\nimport { icon } from '../../../theme';\nimport { IacOutputMeta } from '../../../types';\nimport { colors } from './utils';\nimport { IacTestData } from './types';\n\nconst PAD_LENGTH = 19; // chars to align\nconst INDENT = ' ';\n\nexport function formatIacTestSummary(\n testData: IacTestData,\n outputMeta: IacOutputMeta,\n): string {\n const title = colors.info.bold('Test Summary');\n const summarySections: string[] = [title];\n\n summarySections.push(formatTestMetaSection(outputMeta));\n\n summarySections.push(formatCountsSection(testData));\n\n return summarySections.join(EOL.repeat(2));\n}\n\nfunction formatTestMetaSection(iacMeta: IacOutputMeta): string {\n const metaSectionProperties: [string, string][] = [];\n\n if (iacMeta.orgName) {\n metaSectionProperties.push(['Organization', iacMeta.orgName]);\n }\n\n const metaSection = metaSectionProperties\n .map(([key, value]) =>\n rightPadWithSpaces(`${INDENT}${key}: ${value}`, PAD_LENGTH),\n )\n .join(EOL);\n\n return metaSection;\n}\n\nfunction formatCountsSection(testData: IacTestData): string {\n const filesWithIssues = testData.results.filter(\n (result) => result.result.cloudConfigResults.length,\n ).length;\n const filesWithoutIssues = testData.results.length - filesWithIssues;\n\n const countsSectionProperties: string[] = [];\n\n countsSectionProperties.push(\n `${colors.success.bold(\n icon.VALID,\n )} Files without issues: ${colors.info.bold(`${filesWithoutIssues}`)}`,\n );\n\n countsSectionProperties.push(\n `${colors.failure.bold(icon.ISSUE)} Files with issues: ${colors.info.bold(\n `${filesWithIssues}`,\n )}`,\n );\n\n countsSectionProperties.push(\n `${INDENT}Invalid files: ${colors.info.bold(\n `${testData.failures?.length ?? 0}`,\n )}`,\n );\n\n countsSectionProperties.push(\n `${INDENT}Ignored issues: ${colors.info.bold(`${testData.ignoreCount}`)}`,\n );\n\n let totalIssuesCount = 0;\n\n const issueCountsBySeverities: { [key in SEVERITY]: number } = {\n critical: 0,\n high: 0,\n medium: 0,\n low: 0,\n };\n\n testData.results.forEach((iacTestResponse) => {\n totalIssuesCount += iacTestResponse.result.cloudConfigResults.length;\n iacTestResponse.result.cloudConfigResults.forEach((iacIssue) => {\n issueCountsBySeverities[iacIssue.severity]++;\n });\n });\n\n countsSectionProperties.push(\n `${INDENT}Total issues: ${colors.info.bold(\n `${totalIssuesCount}`,\n )} [ ${colors.severities.critical(\n `${issueCountsBySeverities.critical} critical`,\n )}, ${colors.severities.high(\n `${issueCountsBySeverities.high} high`,\n )}, ${colors.severities.medium(\n `${issueCountsBySeverities.medium} medium`,\n )}, ${colors.severities.low(`${issueCountsBySeverities.low} low`)} ]`,\n );\n\n return countsSectionProperties.join(EOL);\n}\n","import { IaCTestFlags } from '../../../../cli/commands/test/iac/local-execution/types';\nimport { colors } from './utils';\n\n/**\n * Displayed as the title of the test output.\n */\nexport const iacTestTitle = colors.info.bold('Snyk Infrastructure as Code');\n\n/**\n * Progress indication message while files are tested.\n */\nexport const spinnerMessage = colors.info(\n 'Snyk testing Infrastructure as Code configuration issues.',\n);\n\n/**\n * Displayed when a test resolves successfully.\n */\nexport const spinnerSuccessMessage = colors.info('Test completed.');\n\n/**\n * Message for using custom rules.\n */\nexport const customRulesMessage = colors.info(\n 'Using custom rules to generate misconfigurations.',\n);\n\n/**\n * Message for using custom rules.\n */\nexport const customRulesReportMessage = colors.info(\n \"Please note that your custom rules will not be sent to the Snyk platform, and will not be available on the project's page.\",\n);\n\n/**\n * @returns whether or not to include user messages in the output.\n */\nexport function shouldLogUserMessages(\n options: IaCTestFlags,\n iacCliOutputFeatureFlag?: boolean,\n): boolean {\n return !!(\n !options.json &&\n !options.sarif &&\n !options.quiet &&\n iacCliOutputFeatureFlag\n );\n}\n","import chalk, { Chalk } from 'chalk';\nimport { SEVERITY } from '../../../snyk-test/common';\n\ninterface IacOutputColors {\n severities: SeverityColor;\n failure: Chalk;\n success: Chalk;\n info: Chalk;\n title: Chalk;\n}\n\ntype SeverityColor = {\n [severity in SEVERITY]: Chalk;\n};\n\nexport const colors: IacOutputColors = {\n severities: {\n critical: chalk.magenta,\n high: chalk.red,\n medium: chalk.yellow,\n low: chalk.white,\n },\n failure: chalk.red,\n success: chalk.green,\n info: chalk.white,\n title: chalk.white.bold,\n};\n\nexport const contentPadding = ' '.repeat(2);\n","export { formatTestMeta } from './format-test-meta';\nexport { summariseVulnerableResults } from './format-vulnerable-result-summary';\nexport { summariseErrorResults } from './format-error-result-summary';\nexport { formatIssues } from './legacy-format-issue';\nexport { formatLegalInstructions } from './legal-license-instructions';\nexport { formatIssuesWithRemediation } from './remediation-based-format-issues';\nexport { summariseReachableVulns } from './format-reachability';\n\nexport {\n formatErrorMonitorOutput,\n formatMonitorOutput,\n} from './format-monitor-response';\n\nexport * from './docker';\n","const uniq = require('lodash.uniq');\nimport chalk from 'chalk';\n\nimport config from '../../lib/config';\nimport { Options, TestOptions, ShowVulnPaths } from '../../lib/types';\nimport { isLocalFolder } from '../../lib/detect';\nimport { parsePackageString as snykModule } from 'snyk-module';\nimport {\n PINNING_SUPPORTED_PACKAGE_MANAGERS,\n SupportedPackageManagers,\n} from '../../lib/package-managers';\nimport {\n GroupedVuln,\n AnnotatedIssue,\n DockerIssue,\n SEVERITY,\n} from '../../lib/snyk-test/legacy';\nimport { formatLegalInstructions } from './legal-license-instructions';\nimport { getReachabilityText } from './format-reachability';\nimport { colorTextBySeverity } from '../../lib/snyk-test/common';\nimport { PATH_SEPARATOR } from '../constants';\n\nexport function formatIssues(\n vuln: GroupedVuln,\n options: Options & TestOptions,\n) {\n const vulnID = vuln.list[0].id;\n const packageManager = options.packageManager!;\n const localPackageTest = isLocalFolder(options.path);\n const uniquePackages = uniq(\n vuln.list.map((i) => {\n if (i.from[1]) {\n return i.from && i.from[1];\n }\n return i.from;\n }),\n ).join(', ');\n\n const vulnOutput = {\n issueHeading: createSeverityBasedIssueHeading({\n severity: vuln.metadata.severity,\n originalSeverity: vuln.originalSeverity,\n type: vuln.metadata.type,\n packageName: vuln.metadata.name,\n isNew: false,\n }),\n introducedThrough: ' Introduced through: ' + uniquePackages,\n description: ' Description: ' + vuln.title,\n info: ' Info: ' + chalk.underline(config.ROOT + '/vuln/' + vulnID),\n fromPaths: createTruncatedVulnsPathsText(vuln.list, options.showVulnPaths),\n extraInfo: vuln.note ? chalk.bold('\\n Note: ' + vuln.note) : '',\n remediationInfo:\n vuln.metadata.type !== 'license' && localPackageTest\n ? createRemediationText(vuln, packageManager)\n : '',\n fixedIn: options.docker ? createFixedInText(vuln) : '',\n dockerfilePackage: options.docker ? dockerfileInstructionText(vuln) : '',\n legalInstructions: vuln.legalInstructionsArray\n ? chalk.bold('\\n Legal instructions:\\n') +\n ' '.repeat(2) +\n formatLegalInstructions(vuln.legalInstructionsArray, 2)\n : '',\n reachability: vuln.reachability ? createReachabilityInText(vuln) : '',\n };\n\n return (\n `${vulnOutput.issueHeading}\\n` +\n `${vulnOutput.description}\\n` +\n `${vulnOutput.info}\\n` +\n `${vulnOutput.introducedThrough}\\n` +\n vulnOutput.fromPaths +\n // Optional - not always there\n vulnOutput.reachability +\n vulnOutput.remediationInfo +\n vulnOutput.dockerfilePackage +\n vulnOutput.fixedIn +\n vulnOutput.extraInfo +\n vulnOutput.legalInstructions\n );\n}\n\ntype CreateSeverityBasedIssueHeading = {\n severity: SEVERITY;\n originalSeverity?: SEVERITY;\n type: string;\n packageName: string;\n isNew: boolean;\n};\n\nfunction createSeverityBasedIssueHeading({\n severity,\n originalSeverity,\n type,\n packageName,\n isNew,\n}: CreateSeverityBasedIssueHeading) {\n // Example: ✗ Medium severity vulnerability found in xmldom\n const vulnTypeText = type === 'license' ? 'issue' : 'vulnerability';\n\n let originalSeverityStr = '';\n if (originalSeverity && originalSeverity !== severity) {\n originalSeverityStr = ` (originally ${titleCaseText(originalSeverity)})`;\n }\n\n return (\n colorTextBySeverity(\n severity,\n '✗ ' +\n titleCaseText(severity) +\n ` severity${originalSeverityStr} ` +\n vulnTypeText +\n ' found in ' +\n chalk.underline(packageName),\n ) + chalk.bold.magenta(isNew ? ' (new)' : '')\n );\n}\n\nexport function titleCaseText(text) {\n return text[0].toUpperCase() + text.slice(1);\n}\n\nfunction dockerfileInstructionText(vuln) {\n if (vuln.dockerfileInstruction) {\n JSON.stringify(vuln.dockerfileInstruction);\n return `\\n Image layer: '${vuln.dockerfileInstruction}'`;\n }\n\n if (vuln.dockerBaseImage) {\n return `\\n Image layer: Introduced by your base image (${vuln.dockerBaseImage})`;\n }\n\n return '';\n}\nfunction createTruncatedVulnsPathsText(\n vulnList: AnnotatedIssue[],\n show: ShowVulnPaths,\n) {\n if (show === 'none') {\n return '';\n }\n const numberOfPathsToDisplay = show === 'all' ? 1000 : 3;\n const fromPathsArray = vulnList.map((i) => i.from);\n\n const formatedFromPathsArray = fromPathsArray.map((i) => {\n const fromWithoutBaseProject = i.slice(1);\n // If more than one From path\n if (fromWithoutBaseProject.length) {\n return i.slice(1).join(PATH_SEPARATOR);\n }\n // Else issue is in the core package\n return i;\n });\n\n const notShownPathsNumber = fromPathsArray.length - numberOfPathsToDisplay;\n const shouldTruncatePaths = fromPathsArray.length > numberOfPathsToDisplay;\n const truncatedText = `\\n and ${notShownPathsNumber} more...`;\n const formattedPathsText = formatedFromPathsArray\n .slice(0, numberOfPathsToDisplay)\n .join('\\n From: ');\n\n if (fromPathsArray.length > 0) {\n return (\n ' From: ' +\n formattedPathsText +\n (shouldTruncatePaths ? truncatedText : '')\n );\n }\n}\n\nfunction createFixedInText(vuln: GroupedVuln): string {\n if ((vuln as DockerIssue).nearestFixedInVersion) {\n return chalk.bold(\n '\\n Fixed in: ' + (vuln as DockerIssue).nearestFixedInVersion,\n );\n } else if (vuln.fixedIn && vuln.fixedIn.length > 0) {\n return chalk.bold('\\n Fixed in: ' + vuln.fixedIn.join(', '));\n }\n\n return '';\n}\n\nfunction createReachabilityInText(vuln: GroupedVuln): string {\n if (!vuln.reachability) {\n return '';\n }\n const reachabilityText = getReachabilityText(vuln.reachability);\n if (!reachabilityText) {\n return '';\n }\n return `\\n Reachability: ${reachabilityText}`;\n}\n\nfunction createRemediationText(\n vuln: GroupedVuln,\n packageManager: SupportedPackageManagers,\n): string {\n if (\n vuln.fixedIn &&\n PINNING_SUPPORTED_PACKAGE_MANAGERS.includes(packageManager)\n ) {\n const toVersion = vuln.fixedIn.join(' or ');\n const transitive = vuln.list.every((i) => i.from.length > 2);\n const fromVersionArray = vuln.list.map((v) => v.from[1]);\n const fromVersion = fromVersionArray[0];\n if (transitive) {\n return chalk.bold(\n `\\n Remediation:\\n Pin the transitive dependency ${vuln.name} to version ${toVersion}`,\n );\n } else {\n return chalk.bold(\n `\\n Remediation:\\n Upgrade direct dependency ${fromVersion} to ${vuln.name}@${toVersion}`,\n );\n }\n }\n\n if (vuln.isFixable === true) {\n const upgradePathsArray = uniq(\n vuln.list.map((v) => {\n const shouldUpgradeItself = !!v.upgradePath[0];\n const shouldUpgradeDirectDep = !!v.upgradePath[1];\n\n if (shouldUpgradeItself) {\n // If we are testing a library/package like express\n // Then we can suggest they get the latest version\n // Example command: snyk test express@3\n const selfUpgradeInfo =\n v.upgradePath.length > 0\n ? ` (triggers upgrades to ${v.upgradePath.join(PATH_SEPARATOR)})`\n : '';\n const testedPackageName = snykModule(v.upgradePath[0] as string);\n return (\n `You've tested an outdated version of ${testedPackageName[0]}.` +\n +` Upgrade to ${v.upgradePath[0]}${selfUpgradeInfo}`\n );\n }\n if (shouldUpgradeDirectDep) {\n const formattedUpgradePath = v.upgradePath\n .slice(1)\n .join(PATH_SEPARATOR);\n const upgradeTextInfo = v.upgradePath.length\n ? ` (triggers upgrades to ${formattedUpgradePath})`\n : '';\n\n return `Upgrade direct dependency ${v.from[1]} to ${v.upgradePath[1]}${upgradeTextInfo}`;\n }\n\n return 'Some paths have no direct dependency upgrade that can address this issue.';\n }),\n );\n return chalk.bold(\n `\\n Remediation:\\n ${upgradePathsArray.join('\\n ')}`,\n );\n }\n\n if (vuln.fixedIn && vuln.fixedIn.length > 0) {\n return createFixedInText(vuln);\n }\n\n return '';\n}\n","import * as wrap from 'wrap-ansi';\nimport chalk from 'chalk';\n\nimport { LegalInstruction } from '../../lib/snyk-test/legacy';\n\nexport function formatLegalInstructions(\n legalInstructions: LegalInstruction[],\n paddingLength = 4,\n): string {\n const legalContent: string[] = legalInstructions.map((legalData) =>\n wrap(\n chalk.bold(`○ for ${legalData.licenseName}: `) + legalData.legalContent,\n 100,\n )\n .split('\\n')\n .join('\\n' + ' '.repeat(paddingLength)),\n );\n return legalContent.join('\\n' + ' '.repeat(paddingLength));\n}\n","import chalk from 'chalk';\nimport { icon } from '../theme';\nimport config from '../../lib/config';\nimport { TestOptions } from '../../lib/types';\nimport {\n DependencyPins,\n DependencyUpdates,\n GroupedVuln,\n IssueData,\n LegalInstruction,\n PatchRemediation,\n PinRemediation,\n REACHABILITY,\n RemediationChanges,\n SEVERITY,\n UpgradeRemediation,\n} from '../../lib/snyk-test/legacy';\nimport { colorTextBySeverity } from '../../lib/snyk-test/common';\nimport { formatLegalInstructions } from './legal-license-instructions';\nimport {\n formatReachability,\n formatReachablePaths,\n} from './format-reachability';\nimport {\n BasicVulnInfo,\n SampleReachablePaths,\n UpgradesByAffectedPackage,\n} from './types';\nimport { PATH_SEPARATOR } from '../constants';\nimport { getSeverityValue } from './get-severity-value';\n\n// How many reachable paths to show in the output\nconst MAX_REACHABLE_PATHS = 2;\n\nexport function formatIssuesWithRemediation(\n vulns: GroupedVuln[],\n remediationInfo: RemediationChanges,\n options: TestOptions,\n): string[] {\n const basicVulnInfo: {\n [name: string]: BasicVulnInfo;\n } = {};\n\n const basicLicenseInfo: {\n [name: string]: BasicVulnInfo;\n } = {};\n for (const vuln of vulns) {\n const allReachablePaths: SampleReachablePaths = { pathCount: 0, paths: [] };\n for (const issue of vuln.list) {\n const issueReachablePaths = issue.reachablePaths?.paths || [];\n for (const functionReachablePaths of issueReachablePaths) {\n allReachablePaths.paths = allReachablePaths.paths.concat(\n functionReachablePaths.callPaths,\n );\n allReachablePaths.pathCount += functionReachablePaths.callPaths.length;\n }\n }\n const vulnData = {\n title: vuln.title,\n severity: vuln.severity,\n originalSeverity: vuln.originalSeverity,\n isNew: vuln.isNew,\n name: vuln.name,\n type: vuln.metadata.type,\n version: vuln.version,\n fixedIn: vuln.fixedIn,\n note: vuln.note,\n legalInstructions: vuln.legalInstructionsArray,\n paths: vuln.list.map((v) => v.from),\n reachability: vuln.reachability,\n sampleReachablePaths: allReachablePaths,\n };\n\n if (vulnData.type === 'license') {\n basicLicenseInfo[vuln.metadata.id] = vulnData;\n } else {\n basicVulnInfo[vuln.metadata.id] = vulnData;\n }\n }\n\n const results = [''];\n\n let upgradeTextArray: string[];\n if (remediationInfo.pin && Object.keys(remediationInfo.pin).length) {\n const upgradesByAffected: UpgradesByAffectedPackage = {};\n for (const topLevelPkg of Object.keys(remediationInfo.upgrade)) {\n for (const targetPkgStr of remediationInfo.upgrade[topLevelPkg]\n .upgrades) {\n if (!upgradesByAffected[targetPkgStr]) {\n upgradesByAffected[targetPkgStr] = [];\n }\n upgradesByAffected[targetPkgStr].push({\n name: topLevelPkg,\n version: remediationInfo.upgrade[topLevelPkg].upgradeTo,\n });\n }\n }\n upgradeTextArray = constructPinText(\n remediationInfo.pin,\n upgradesByAffected,\n basicVulnInfo,\n options,\n );\n const allVulnIds = new Set();\n Object.keys(remediationInfo.pin).forEach((name) =>\n remediationInfo.pin[name].vulns.forEach((vid) => allVulnIds.add(vid)),\n );\n remediationInfo.unresolved = remediationInfo.unresolved.filter(\n (issue) => !allVulnIds.has(issue.id),\n );\n } else {\n upgradeTextArray = constructUpgradesText(\n remediationInfo.upgrade,\n basicVulnInfo,\n options,\n );\n }\n if (upgradeTextArray.length > 0) {\n results.push(upgradeTextArray.join('\\n'));\n }\n\n const patchedTextArray = constructPatchesText(\n remediationInfo.patch,\n basicVulnInfo,\n options,\n );\n\n if (patchedTextArray.length > 0) {\n results.push(patchedTextArray.join('\\n'));\n }\n\n const unfixableIssuesTextArray = constructUnfixableText(\n remediationInfo.unresolved,\n basicVulnInfo,\n options,\n );\n\n if (unfixableIssuesTextArray.length > 0) {\n results.push(unfixableIssuesTextArray.join('\\n'));\n }\n\n const licenseIssuesTextArray = constructLicenseText(\n basicLicenseInfo,\n options,\n );\n\n if (licenseIssuesTextArray.length > 0) {\n results.push(licenseIssuesTextArray.join('\\n'));\n }\n\n return results;\n}\n\nfunction constructLicenseText(\n basicLicenseInfo: {\n [name: string]: BasicVulnInfo;\n },\n testOptions: TestOptions,\n): string[] {\n if (!(Object.keys(basicLicenseInfo).length > 0)) {\n return [];\n }\n\n const licenseTextArray = [chalk.bold.green('\\nLicense issues:')];\n\n for (const id of Object.keys(basicLicenseInfo)) {\n const licenseText = formatIssue(\n id,\n basicLicenseInfo[id].title,\n basicLicenseInfo[id].severity,\n basicLicenseInfo[id].isNew,\n `${basicLicenseInfo[id].name}@${basicLicenseInfo[id].version}`,\n basicLicenseInfo[id].paths,\n testOptions,\n basicLicenseInfo[id].note,\n undefined, // We can never override license rules, so no originalSeverity here\n basicLicenseInfo[id].legalInstructions,\n );\n licenseTextArray.push('\\n' + licenseText);\n }\n return licenseTextArray;\n}\n\nfunction constructPatchesText(\n patches: {\n [name: string]: PatchRemediation;\n },\n basicVulnInfo: {\n [name: string]: BasicVulnInfo;\n },\n testOptions: TestOptions,\n): string[] {\n if (!(Object.keys(patches).length > 0)) {\n return [];\n }\n const patchedTextArray = [chalk.bold.green('\\nPatchable issues:')];\n for (const id of Object.keys(patches)) {\n if (!basicVulnInfo[id]) {\n continue;\n }\n if (basicVulnInfo[id].type === 'license') {\n continue;\n }\n\n // todo: add vulnToPatch package name\n const packageAtVersion = `${basicVulnInfo[id].name}@${basicVulnInfo[id].version}`;\n const patchedText = `\\n Patch available for ${chalk.bold.whiteBright(\n packageAtVersion,\n )}\\n`;\n const thisPatchFixes = formatIssue(\n id,\n basicVulnInfo[id].title,\n basicVulnInfo[id].severity,\n basicVulnInfo[id].isNew,\n `${basicVulnInfo[id].name}@${basicVulnInfo[id].version}`,\n basicVulnInfo[id].paths,\n testOptions,\n basicVulnInfo[id].note,\n basicVulnInfo[id].originalSeverity,\n );\n patchedTextArray.push(patchedText + thisPatchFixes);\n }\n\n return patchedTextArray;\n}\n\nfunction thisUpgradeFixes(\n vulnIds: string[],\n basicVulnInfo: Record<string, BasicVulnInfo>,\n testOptions: TestOptions,\n) {\n return vulnIds\n .filter((id) => basicVulnInfo[id]) // basicVulnInfo only contains issues with the specified severity levels\n .sort(\n (a, b) =>\n getSeverityValue(basicVulnInfo[a].severity) -\n getSeverityValue(basicVulnInfo[b].severity),\n )\n .filter((id) => basicVulnInfo[id].type !== 'license')\n .map((id) =>\n formatIssue(\n id,\n basicVulnInfo[id].title,\n basicVulnInfo[id].severity,\n basicVulnInfo[id].isNew,\n `${basicVulnInfo[id].name}@${basicVulnInfo[id].version}`,\n basicVulnInfo[id].paths,\n testOptions,\n basicVulnInfo[id].note,\n basicVulnInfo[id].originalSeverity,\n [],\n basicVulnInfo[id].reachability,\n basicVulnInfo[id].sampleReachablePaths,\n ),\n )\n .join('\\n');\n}\n\nfunction processUpgrades(\n sink: string[],\n upgradesByDep: DependencyUpdates | DependencyPins,\n deps: string[],\n basicVulnInfo: Record<string, BasicVulnInfo>,\n testOptions: TestOptions,\n) {\n for (const dep of deps) {\n const data = upgradesByDep[dep];\n const upgradeDepTo = data.upgradeTo;\n const vulnIds =\n (data as UpgradeRemediation).vulns || (data as PinRemediation).vulns;\n const upgradeText = `\\n Upgrade ${chalk.bold.whiteBright(\n dep,\n )} to ${chalk.bold.whiteBright(upgradeDepTo)} to fix\\n`;\n sink.push(\n upgradeText + thisUpgradeFixes(vulnIds, basicVulnInfo, testOptions),\n );\n }\n}\n\nfunction constructUpgradesText(\n upgrades: DependencyUpdates,\n basicVulnInfo: {\n [name: string]: BasicVulnInfo;\n },\n testOptions: TestOptions,\n): string[] {\n if (!(Object.keys(upgrades).length > 0)) {\n return [];\n }\n\n const upgradeTextArray = [chalk.bold.green('\\nIssues to fix by upgrading:')];\n processUpgrades(\n upgradeTextArray,\n upgrades,\n Object.keys(upgrades),\n basicVulnInfo,\n testOptions,\n );\n return upgradeTextArray;\n}\n\nfunction constructPinText(\n pins: DependencyPins,\n upgradesByAffected: UpgradesByAffectedPackage, // classical \"remediation via top-level dep\" upgrades\n basicVulnInfo: Record<string, BasicVulnInfo>,\n testOptions: TestOptions,\n): string[] {\n if (!Object.keys(pins).length) {\n return [];\n }\n\n const upgradeTextArray: string[] = [];\n upgradeTextArray.push(\n chalk.bold.green('\\nIssues to fix by upgrading dependencies:'),\n );\n\n // First, direct upgrades\n\n const upgradeables = Object.keys(pins).filter(\n (name) => !pins[name].isTransitive,\n );\n if (upgradeables.length) {\n processUpgrades(\n upgradeTextArray,\n pins,\n upgradeables,\n basicVulnInfo,\n testOptions,\n );\n }\n\n // Second, pins\n const pinables = Object.keys(pins).filter((name) => pins[name].isTransitive);\n\n if (pinables.length) {\n for (const pkgName of pinables) {\n const data = pins[pkgName];\n const vulnIds = data.vulns;\n const upgradeDepTo = data.upgradeTo;\n const upgradeText = `\\n Pin ${chalk.bold.whiteBright(\n pkgName,\n )} to ${chalk.bold.whiteBright(upgradeDepTo)} to fix`;\n upgradeTextArray.push(upgradeText);\n upgradeTextArray.push(\n thisUpgradeFixes(vulnIds, basicVulnInfo, testOptions),\n );\n\n // Finally, if we have some upgrade paths that fix the same issues, suggest them as well.\n const topLevelUpgradesAlreadySuggested = new Set();\n for (const vid of vulnIds) {\n for (const topLevelPkg of upgradesByAffected[\n pkgName + '@' + basicVulnInfo[vid].version\n ] || []) {\n const setKey = `${topLevelPkg.name}\\n${topLevelPkg.version}`;\n if (!topLevelUpgradesAlreadySuggested.has(setKey)) {\n topLevelUpgradesAlreadySuggested.add(setKey);\n upgradeTextArray.push(\n ' The issues above can also be fixed by upgrading top-level dependency ' +\n `${topLevelPkg.name} to ${topLevelPkg.version}`,\n );\n }\n }\n }\n }\n }\n\n return upgradeTextArray;\n}\n\nfunction constructUnfixableText(\n unresolved: IssueData[],\n basicVulnInfo: Record<string, BasicVulnInfo>,\n testOptions: TestOptions,\n) {\n if (!(unresolved.length > 0)) {\n return [];\n }\n const unfixableIssuesTextArray = [\n chalk.bold.white('\\nIssues with no direct upgrade or patch:'),\n ];\n for (const issue of unresolved) {\n const issueInfo = basicVulnInfo[issue.id];\n if (!issueInfo) {\n // basicVulnInfo only contains issues with the specified severity levels\n continue;\n }\n\n const extraInfo =\n issue.fixedIn && issue.fixedIn.length\n ? `\\n This issue was fixed in versions: ${chalk.bold(\n issue.fixedIn.join(', '),\n )}`\n : '\\n No upgrade or patch available';\n unfixableIssuesTextArray.push(\n formatIssue(\n issue.id,\n issue.title,\n issue.severity,\n issue.isNew,\n `${issue.packageName}@${issue.version}`,\n issueInfo.paths,\n testOptions,\n issueInfo.note,\n issueInfo.originalSeverity,\n [],\n issue.reachability,\n ) + `${extraInfo}`,\n );\n }\n\n if (unfixableIssuesTextArray.length === 1) {\n // seems we still only have\n // the initial section title, so nothing to return\n return [];\n }\n\n return unfixableIssuesTextArray;\n}\n\nexport function printPath(path: string[], slice = 1) {\n return path.slice(slice).join(PATH_SEPARATOR);\n}\n\nexport function formatIssue(\n id: string,\n title: string,\n severity: SEVERITY,\n isNew: boolean,\n vulnerableModule: string,\n paths: string[][],\n testOptions: TestOptions,\n note: string | false,\n originalSeverity?: SEVERITY,\n legalInstructions?: LegalInstruction[],\n reachability?: REACHABILITY,\n sampleReachablePaths?: SampleReachablePaths,\n): string {\n const newBadge = isNew ? ' (new)' : '';\n const name = vulnerableModule ? ` in ${chalk.bold(vulnerableModule)}` : '';\n let legalLicenseInstructionsText;\n if (legalInstructions) {\n legalLicenseInstructionsText = formatLegalInstructions(legalInstructions);\n }\n let reachabilityText = '';\n if (reachability) {\n reachabilityText = formatReachability(reachability);\n }\n\n let introducedBy = '';\n\n if (\n testOptions.showVulnPaths === 'some' &&\n paths &&\n paths.find((p) => p.length > 1)\n ) {\n // In this mode, we show only one path by default, for compactness\n const pathStr = printPath(paths[0]);\n introducedBy =\n paths.length === 1\n ? `\\n introduced by ${pathStr}`\n : `\\n introduced by ${pathStr} and ${chalk.cyanBright(\n '' + (paths.length - 1),\n )} other path(s)`;\n } else if (testOptions.showVulnPaths === 'all' && paths) {\n introducedBy =\n '\\n introduced by:' +\n paths\n .slice(0, 1000)\n .map((p) => '\\n ' + printPath(p))\n .join('');\n if (paths.length > 1000) {\n introducedBy += `\\n and ${chalk.cyanBright(\n '' + (paths.length - 1),\n )} other path(s)`;\n }\n }\n\n const reachableVia = formatReachablePaths(\n sampleReachablePaths,\n MAX_REACHABLE_PATHS,\n reachablePathsTemplate,\n );\n\n let originalSeverityStr = '';\n if (originalSeverity && originalSeverity !== severity) {\n originalSeverityStr = ` (originally ${titleCaseText(originalSeverity)})`;\n }\n\n return (\n colorTextBySeverity(\n severity,\n ` ${icon.ISSUE} ${chalk.bold(title)}${newBadge} [${titleCaseText(\n severity,\n )} Severity${originalSeverityStr}]`,\n ) +\n reachabilityText +\n `[${config.ROOT}/vuln/${id}]` +\n name +\n reachableVia +\n introducedBy +\n (legalLicenseInstructionsText\n ? `${chalk.bold(\n '\\n Legal instructions',\n )}:\\n ${legalLicenseInstructionsText}`\n : '') +\n (note ? `${chalk.bold('\\n Note')}:\\n ${note}` : '')\n );\n}\n\nfunction titleCaseText(text) {\n return text[0].toUpperCase() + text.slice(1);\n}\n\nfunction reachablePathsTemplate(\n samplePaths: string[],\n extraPathsCount: number,\n): string {\n if (samplePaths.length === 0 && extraPathsCount === 0) {\n return '';\n }\n if (samplePaths.length === 0) {\n return `\\n reachable via at least ${extraPathsCount} paths`;\n }\n let reachableVia = '\\n reachable via:\\n';\n for (const p of samplePaths) {\n reachableVia += ` ${p}\\n`;\n }\n if (extraPathsCount > 0) {\n reachableVia += ` and at least ${chalk.cyanBright(\n '' + extraPathsCount,\n )} other path(s)`;\n }\n return reachableVia;\n}\n","import * as sarif from 'sarif';\nimport { TestResult } from '../snyk-test/legacy';\nimport { SEVERITY } from '../snyk-test/legacy';\nconst upperFirst = require('lodash.upperfirst');\n\nexport function createSarifOutputForContainers(\n testResults: TestResult[],\n): sarif.Log {\n const sarifRes: sarif.Log = {\n version: '2.1.0',\n runs: [],\n };\n\n testResults.forEach((testResult) => {\n sarifRes.runs.push({\n tool: getTool(testResult),\n results: getResults(testResult),\n });\n });\n\n return sarifRes;\n}\n\nexport function getIssueLevel(\n severity: SEVERITY | 'none',\n): sarif.ReportingConfiguration.level {\n return severity === SEVERITY.HIGH || severity === SEVERITY.CRITICAL\n ? 'error'\n : 'warning';\n}\n\nexport function getTool(testResult): sarif.Tool {\n const tool: sarif.Tool = {\n driver: {\n name: 'Snyk Container',\n rules: [],\n },\n };\n\n if (!testResult.vulnerabilities) {\n return tool;\n }\n\n const pushedIds = {};\n tool.driver.rules = testResult.vulnerabilities\n .map((vuln) => {\n if (pushedIds[vuln.id]) {\n return;\n }\n const level = getIssueLevel(vuln.severity);\n const cve = vuln['identifiers']['CVE'][0];\n pushedIds[vuln.id] = true;\n return {\n id: vuln.id,\n shortDescription: {\n text: `${upperFirst(vuln.severity)} severity - ${\n vuln.title\n } vulnerability in ${vuln.packageName}`,\n },\n fullDescription: {\n text: cve\n ? `(${cve}) ${vuln.name}@${vuln.version}`\n : `${vuln.name}@${vuln.version}`,\n },\n help: {\n text: '',\n markdown: vuln.description,\n },\n defaultConfiguration: {\n level: level,\n },\n properties: {\n tags: ['security', ...vuln.identifiers.CWE],\n },\n };\n })\n .filter(Boolean);\n return tool;\n}\n\nexport function getResults(testResult): sarif.Result[] {\n const results: sarif.Result[] = [];\n\n if (!testResult.vulnerabilities) {\n return results;\n }\n testResult.vulnerabilities.forEach((vuln) => {\n results.push({\n ruleId: vuln.id,\n message: {\n text: `This file introduces a vulnerable ${vuln.packageName} package with a ${vuln.severity} severity vulnerability.`,\n },\n locations: [\n {\n physicalLocation: {\n artifactLocation: {\n uri: testResult.displayTargetFile,\n },\n region: {\n startLine: vuln.lineNumber || 1,\n },\n },\n },\n ],\n });\n });\n return results;\n}\n","import { isMultiProjectScan } from '../is-multi-project-scan';\n\nexport function showAllProjectsTip(\n packageManager,\n options,\n foundProjectCount,\n): string {\n if (\n packageManager === 'gradle' ||\n !foundProjectCount ||\n isMultiProjectScan(options)\n ) {\n return '';\n }\n return (\n `Tip: Detected multiple supported manifests (${foundProjectCount}), ` +\n 'use --all-projects to scan all of them at once.'\n );\n}\n","import { isMultiProjectScan } from '../is-multi-project-scan';\n\nexport function showGradleSubProjectsTip(\n packageManager,\n options,\n foundProjectCount,\n): string {\n if (\n packageManager !== 'gradle' ||\n !foundProjectCount ||\n isMultiProjectScan(options) ||\n options.allSubProjects\n ) {\n return '';\n }\n\n return (\n `Tip: This project has multiple sub-projects (${foundProjectCount}), ` +\n 'use --all-sub-projects flag to scan all sub-projects.'\n );\n}\n","import { SupportedPackageManagers } from '../package-managers';\nimport { Options, SupportedProjectTypes, TestOptions } from '../types';\n\nimport { showAllProjectsTip } from './show-all-projects-tip';\nimport { showGradleSubProjectsTip } from './show-all-sub-projects-tip';\n\nexport function showMultiScanTip(\n projectType: SupportedProjectTypes | SupportedPackageManagers,\n options: Options & TestOptions,\n foundProjectCount?: number,\n): string {\n const gradleSubProjectsTip = showGradleSubProjectsTip(\n projectType,\n options,\n foundProjectCount,\n );\n if (gradleSubProjectsTip) {\n return gradleSubProjectsTip;\n }\n const allProjectsTip = showAllProjectsTip(\n projectType,\n options,\n foundProjectCount,\n );\n if (allProjectsTip) {\n return allProjectsTip;\n }\n return '';\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\n\nexport function getFileContents(\n root: string,\n fileName: string,\n): {\n content: string;\n fileName: string;\n} {\n const fullPath = path.resolve(root, fileName);\n if (!fs.existsSync(fullPath)) {\n throw new Error(\n 'Manifest ' + fileName + ' not found at location: ' + fileName,\n );\n }\n const content = fs.readFileSync(fullPath, 'utf-8');\n return {\n content,\n fileName,\n };\n}\n","import { ParserFileType } from '@snyk/cloud-config-parser';\n\nexport type IacProjectTypes =\n | 'k8sconfig'\n | 'terraformconfig'\n | 'cloudformationconfig'\n | 'armconfig'\n | 'customconfig'\n | 'multiiacconfig';\nexport type IacFileTypes = ParserFileType | 'tf' | 'tfvars';\n\nexport enum IacProjectType {\n K8S = 'k8sconfig',\n TERRAFORM = 'terraformconfig',\n CLOUDFORMATION = 'cloudformationconfig',\n ARM = 'armconfig',\n CUSTOM = 'customconfig',\n MULTI_IAC = 'multiiacconfig',\n}\n\nexport const TEST_SUPPORTED_IAC_PROJECTS: IacProjectTypes[] = [\n IacProjectType.K8S,\n IacProjectType.TERRAFORM,\n IacProjectType.CLOUDFORMATION,\n IacProjectType.ARM,\n IacProjectType.MULTI_IAC,\n IacProjectType.CUSTOM,\n];\n\nexport const iacRemediationTypes: { [k in IacProjectTypes]?: string } = {\n armconfig: 'arm',\n cloudformationconfig: 'cloudformation',\n k8sconfig: 'kubernetes',\n terraformconfig: 'terraform',\n};\n","import { statSync } from 'fs';\nimport { dirname } from 'path';\nimport * as childProcess from 'child_process';\n\nexport function getRepositoryRootForPath(p: string) {\n return getRepositoryRoot(getWorkingDirectoryForPath(p));\n}\n\nexport function getRepositoryRoot(cwd?: string) {\n const proc = childProcess.spawnSync('git', ['rev-parse', '--show-toplevel'], {\n cwd,\n });\n if (proc.status !== 0) {\n throw new Error();\n }\n return proc.stdout.toString().trim();\n}\n\nexport function getWorkingDirectoryForPath(p: string) {\n if (statSync(p).isDirectory()) {\n return p;\n }\n return dirname(p);\n}\n","import { Options, TestOptions, MonitorOptions, PolicyOptions } from './types';\n\nexport function isMultiProjectScan(\n options: Partial<Options & TestOptions & MonitorOptions & PolicyOptions>,\n): boolean {\n return !!(options.allProjects || options.yarnWorkspaces);\n}\n","const debug = require('debug')('snyk-json');\n\n/**\n * Attempt to json-stringify an object which is potentially very large and might exceed the string limit.\n * If it does exceed the string limit, try again without pretty-print to hopefully come out below the string limit.\n * @param obj the object from which you want to get a JSON string\n */\nexport function jsonStringifyLargeObject(obj: any): string {\n let res = '';\n try {\n // first try pretty-print\n res = JSON.stringify(obj, null, 2);\n return res;\n } catch (err) {\n // if that doesn't work, try non-pretty print\n debug('JSON.stringify failed - trying again without pretty print', err);\n res = JSON.stringify(obj);\n return res;\n }\n}\n","const merge = require('lodash.merge');\nimport * as Debug from 'debug';\nimport { legacyPlugin as pluginApi } from '@snyk/cli-interface';\n\nconst debug = Debug('snyk-module-info');\n\nexport function ModuleInfo(plugin, policy) {\n return {\n async inspect(\n root,\n targetFile,\n options,\n ): Promise<pluginApi.SinglePackageResult | pluginApi.MultiProjectResult> {\n const pluginOptions = merge(\n {\n args: options._doubleDashArgs,\n },\n options,\n );\n\n debug('calling plugin inspect()', { root, targetFile, pluginOptions });\n const info = await plugin.inspect(root, targetFile, pluginOptions);\n debug('plugin inspect() done');\n\n // attach policy if not provided by plugin\n if (policy && !info.package.policy) {\n info.package.policy = policy.toString();\n }\n\n return info;\n },\n };\n}\n","import { DepTree } from '../types';\n\nexport function countTotalDependenciesInTree(depTree: DepTree): number {\n let count = 0;\n if (depTree.dependencies) {\n for (const name of Object.keys(depTree.dependencies)) {\n const dep = depTree.dependencies[name];\n if (dep) {\n count += 1 + countTotalDependenciesInTree(dep);\n }\n }\n }\n return count;\n}\n","/**\n * This is to count the number of \"contributing\" developers using Snyk on a given repo.\n * \"Contributing\" is defined as having contributed a commit in the last 90 days.\n * This is use only on the `snyk monitor` command as that is used to monitor a project's dependencies in an\n * on-going manner.\n * It collects the email of a git user and the most recent commit timestamp (both per the `git log`\n * output) and can be disabled by config (see https://snyk.io/policies/tracking-and-analytics/).\n */\nimport { exec } from 'child_process';\nimport { Contributor } from '../types';\n\nexport const SERIOUS_DELIMITER = '_SNYK_SEPARATOR_';\nexport const CONTRIBUTING_DEVELOPER_PERIOD_DAYS = 90;\n// Limit the number of commits returned from `git log` command to stay within maxBuffer limit\nexport const MAX_COMMITS_IN_GIT_LOG = 500;\n\nexport async function getContributors(\n { endDate, periodDays, repoPath } = {\n endDate: new Date(),\n periodDays: CONTRIBUTING_DEVELOPER_PERIOD_DAYS,\n repoPath: process.cwd(),\n },\n): Promise<Contributor[]> {\n const timestampStartOfContributingDeveloperPeriod = getTimestampStartOfContributingDevTimeframe(\n endDate,\n periodDays,\n );\n const gitLogResults = await runGitLog(\n timestampStartOfContributingDeveloperPeriod,\n Math.floor(endDate.getTime() / 1000),\n repoPath,\n execShell,\n );\n const stats: GitRepoCommitStats = parseGitLog(gitLogResults);\n return stats.getRepoContributors();\n}\n\nexport class GitCommitInfo {\n authorEmail: string;\n commitTimestamp: string; // use ISO 8601 format\n\n constructor(authorEmail: string, commitTimestamp: string) {\n this.authorEmail = authorEmail;\n this.commitTimestamp = commitTimestamp;\n }\n}\n\nexport class GitRepoCommitStats {\n commitInfos: GitCommitInfo[];\n\n constructor(commitInfos: GitCommitInfo[]) {\n this.commitInfos = commitInfos;\n }\n\n public static empty(): GitRepoCommitStats {\n return new GitRepoCommitStats([]);\n }\n\n public addCommitInfo(info: GitCommitInfo): void {\n this.commitInfos.push(info);\n }\n\n public getUniqueAuthorsCount(): number {\n const uniqueAuthorEmails = this.getUniqueAuthorEmails();\n return uniqueAuthorEmails.size;\n }\n\n public getCommitsCount(): number {\n return this.commitInfos.length;\n }\n\n public getUniqueAuthorEmails(): Set<string> {\n const allCommitAuthorHashedEmails: string[] = this.commitInfos.map(\n (c) => c.authorEmail,\n );\n const uniqueAuthorEmails: Set<string> = new Set(\n allCommitAuthorHashedEmails,\n );\n return uniqueAuthorEmails;\n }\n\n public getRepoContributors(): Contributor[] {\n const uniqueAuthorEmails = this.getUniqueAuthorEmails();\n const contributors: Contributor[] = [];\n for (const nextUniqueAuthorEmail of uniqueAuthorEmails) {\n const latestCommitTimestamp = this.getMostRecentCommitTimestamp(\n nextUniqueAuthorEmail,\n );\n contributors.push({\n email: nextUniqueAuthorEmail,\n lastCommitDate: latestCommitTimestamp,\n });\n }\n return contributors;\n }\n\n public getMostRecentCommitTimestamp(authorHashedEmail: string): string {\n for (const nextGI of this.commitInfos) {\n if (nextGI.authorEmail === authorHashedEmail) {\n return nextGI.commitTimestamp;\n }\n }\n return '';\n }\n}\n\nexport function parseGitLogLine(logLine: string): GitCommitInfo {\n const lineComponents = logLine.split(SERIOUS_DELIMITER);\n const authorEmail = lineComponents[2];\n const commitTimestamp = lineComponents[3];\n const commitInfo = new GitCommitInfo(authorEmail, commitTimestamp);\n return commitInfo;\n}\n\nexport function parseGitLog(gitLog: string): GitRepoCommitStats {\n if (gitLog.trim() === '') {\n return GitRepoCommitStats.empty();\n }\n const logLines = separateLines(gitLog);\n const logLineInfos: GitCommitInfo[] = logLines.map(parseGitLogLine);\n const stats: GitRepoCommitStats = new GitRepoCommitStats(logLineInfos);\n return stats;\n}\n\n/**\n * @returns time stamp in seconds-since-epoch of 90 days ago since 90 days is the \"contributing devs\" timeframe\n */\nexport function getTimestampStartOfContributingDevTimeframe(\n dNow: Date,\n timespanInDays: number = CONTRIBUTING_DEVELOPER_PERIOD_DAYS,\n): number {\n const nowUtcEpocMS = dNow.getTime();\n const nowUtcEpocS = Math.floor(nowUtcEpocMS / 1000);\n const ONE_DAY_IN_SECONDS = 86400;\n const lookbackTimespanSeconds = timespanInDays * ONE_DAY_IN_SECONDS;\n const startOfPeriodEpochSeconds = nowUtcEpocS - lookbackTimespanSeconds;\n return startOfPeriodEpochSeconds;\n}\n\nexport async function runGitLog(\n timestampEpochSecondsStartOfPeriod: number,\n timestampEpochSecondsEndOfPeriod: number,\n repoPath: string,\n fnShellout: (cmd: string, workingDirectory: string) => Promise<string>,\n): Promise<string> {\n try {\n const gitLogCommand = `git --no-pager log --pretty=tformat:\"%H${SERIOUS_DELIMITER}%an${SERIOUS_DELIMITER}%ae${SERIOUS_DELIMITER}%aI\" --after=\"${timestampEpochSecondsStartOfPeriod}\" --until=\"${timestampEpochSecondsEndOfPeriod}\" --max-count=${MAX_COMMITS_IN_GIT_LOG}`;\n const gitLogStdout: string = await fnShellout(gitLogCommand, repoPath);\n return gitLogStdout;\n } catch {\n return '';\n }\n}\n\nexport function separateLines(inputText: string): string[] {\n const linuxStyleNewLine = '\\n';\n const windowsStyleNewLine = '\\r\\n';\n const reg = new RegExp(`${linuxStyleNewLine}|${windowsStyleNewLine}`);\n const lines = inputText.trim().split(reg);\n return lines;\n}\n\nexport function execShell(\n cmd: string,\n workingDirectory: string,\n): Promise<string> {\n const options = {\n cwd: workingDirectory,\n };\n\n return new Promise((resolve, reject) => {\n exec(cmd, options, (error, stdout, stderr) => {\n if (error) {\n const exitCode = error.code;\n\n const e = new ShellOutError(\n error.message,\n exitCode,\n stdout,\n stderr,\n error,\n );\n reject(e);\n } else {\n resolve(stdout ? stdout : stderr);\n }\n });\n });\n}\n\nexport class ShellOutError extends Error {\n public innerError: Error | undefined;\n public exitCode: number | undefined;\n public stdout: string | undefined;\n public stderr: string | undefined;\n\n constructor(\n message: string,\n exitCode: number | undefined,\n stdout: string,\n stderr: string,\n innerError: Error | undefined,\n ) {\n super(message);\n this.exitCode = exitCode;\n this.stdout = stdout;\n this.stderr = stderr;\n this.innerError = innerError;\n }\n}\n","import { DepTree } from '../types';\n\nexport function dropEmptyDeps(depTree: DepTree) {\n if (depTree.dependencies) {\n const keys = Object.keys(depTree.dependencies);\n if (keys.length === 0) {\n delete depTree.dependencies;\n } else {\n for (const k of keys) {\n dropEmptyDeps(depTree.dependencies[k]);\n }\n }\n }\n return depTree;\n}\n","import { DepTree } from '../types';\n\ninterface FilteredDepTree {\n filteredDepTree: DepTree;\n missingDeps: string[];\n}\n\nexport function filterOutMissingDeps(depTree: DepTree): FilteredDepTree {\n const filteredDeps = {};\n const missingDeps: string[] = [];\n\n if (!depTree.dependencies) {\n return {\n filteredDepTree: depTree,\n missingDeps,\n };\n }\n\n for (const depKey of Object.keys(depTree.dependencies)) {\n const dep = depTree.dependencies[depKey];\n if (\n (dep as any).missingLockFileEntry ||\n ((dep as any).labels && (dep as any).labels.missingLockFileEntry)\n ) {\n // TODO(kyegupov): add field to the type\n missingDeps.push(`${dep.name}@${dep.version}`);\n } else {\n filteredDeps[depKey] = dep;\n }\n }\n const filteredDepTree: DepTree = {\n ...depTree,\n dependencies: filteredDeps,\n };\n\n return {\n filteredDepTree,\n missingDeps,\n };\n}\n","import * as Debug from 'debug';\nimport * as path from 'path';\nimport * as depGraphLib from '@snyk/dep-graph';\nimport * as snyk from '..';\nimport { apiOrOAuthTokenExists, getAuthHeader } from '../api-token';\nimport { makeRequest } from '../request';\nimport config from '../config';\nimport * as os from 'os';\nconst get = require('lodash.get');\nimport { isCI } from '../is-ci';\nimport * as analytics from '../analytics';\nimport {\n DepTree,\n MonitorMeta,\n MonitorResult,\n PolicyOptions,\n MonitorOptions,\n Options,\n Contributor,\n ProjectAttributes,\n Tag,\n} from '../types';\nimport * as projectMetadata from '../project-metadata';\nimport {\n MonitorError,\n ConnectionTimeoutError,\n FailedToRunTestError,\n errorMessageWithRetry,\n} from '../errors';\nimport { pruneGraph } from '../prune';\nimport { GRAPH_SUPPORTED_PACKAGE_MANAGERS } from '../package-managers';\nimport { countTotalDependenciesInTree } from './count-total-deps-in-tree';\nimport { filterOutMissingDeps } from './filter-out-missing-deps';\nimport { dropEmptyDeps } from './drop-empty-deps';\nimport { pruneTree } from './prune-dep-tree';\nimport { findAndLoadPolicy } from '../policy';\nimport { PluginMetadata } from '@snyk/cli-interface/legacy/plugin';\nimport {\n CallGraph,\n CallGraphError,\n ScannedProject,\n} from '@snyk/cli-interface/legacy/common';\nimport { isGitTarget } from '../project-metadata/types';\nimport { serializeCallGraphWithMetrics } from '../reachable-vulns';\nimport {\n getNameDepTree,\n getNameDepGraph,\n getProjectName,\n getTargetFile,\n} from './utils';\nimport { countPathsToGraphRoot } from '../utils';\nimport * as alerts from '../alerts';\nimport { abridgeErrorMessage } from '../error-format';\n\nconst debug = Debug('snyk');\n\nconst ANALYTICS_PAYLOAD_MAX_LENGTH = 1024;\n\ninterface MonitorBody {\n meta: Meta;\n policy: string;\n package?: DepTree;\n callGraph?: CallGraph;\n target: {};\n targetFileRelativePath: string;\n targetFile: string;\n contributors?: Contributor[];\n}\n\ninterface Meta {\n method?: string;\n hostname: string;\n id: string;\n ci: boolean;\n pid: number;\n node: string;\n master: boolean;\n name: string;\n version: string;\n org?: string;\n pluginName: string;\n pluginRuntime: string;\n dockerImageId?: string;\n dockerBaseImage?: string;\n projectName: string;\n}\n\nexport async function monitor(\n root: string,\n meta: MonitorMeta,\n scannedProject: ScannedProject,\n options: Options & MonitorOptions & PolicyOptions,\n pluginMeta: PluginMetadata,\n targetFileRelativePath?: string,\n contributors?: Contributor[],\n projectAttributes?: ProjectAttributes,\n tags?: Tag[],\n): Promise<MonitorResult> {\n apiOrOAuthTokenExists();\n\n const packageManager = meta.packageManager;\n analytics.add('packageManager', packageManager);\n analytics.add('isDocker', !!meta.isDocker);\n\n if (scannedProject.depGraph) {\n return await monitorDepGraph(\n root,\n meta,\n scannedProject,\n pluginMeta,\n options,\n targetFileRelativePath,\n contributors,\n projectAttributes,\n tags,\n );\n }\n\n if (GRAPH_SUPPORTED_PACKAGE_MANAGERS.includes(packageManager)) {\n return await monitorDepGraphFromDepTree(\n root,\n meta,\n scannedProject,\n pluginMeta,\n options,\n targetFileRelativePath,\n contributors,\n projectAttributes,\n tags,\n );\n }\n\n return await monitorDepTree(\n root,\n meta,\n scannedProject,\n pluginMeta,\n options,\n targetFileRelativePath,\n contributors,\n projectAttributes,\n tags,\n );\n}\n\nasync function monitorDepTree(\n root: string,\n meta: MonitorMeta,\n scannedProject: ScannedProject,\n pluginMeta: PluginMetadata,\n options: MonitorOptions & PolicyOptions,\n targetFileRelativePath?: string,\n contributors?: Contributor[],\n projectAttributes?: ProjectAttributes,\n tags?: Tag[],\n): Promise<MonitorResult> {\n let treeMissingDeps: string[] = [];\n\n const packageManager = meta.packageManager;\n\n let depTree = scannedProject.depTree;\n\n if (!depTree) {\n debug(\n 'scannedProject is missing depGraph or depTree, cannot run test/monitor',\n );\n throw new FailedToRunTestError(\n errorMessageWithRetry('Your monitor request could not be completed.'),\n );\n }\n\n let prePruneDepCount;\n if (meta.prune) {\n debug('prune used, counting total dependencies');\n prePruneDepCount = countTotalDependenciesInTree(depTree);\n analytics.add('prePruneDepCount', prePruneDepCount);\n debug('total dependencies: %d', prePruneDepCount);\n debug('pruning dep tree');\n depTree = await pruneTree(depTree, meta.packageManager);\n debug('finished pruning dep tree');\n }\n if (['npm', 'yarn'].includes(meta.packageManager)) {\n const { filteredDepTree, missingDeps } = filterOutMissingDeps(depTree);\n depTree = filteredDepTree;\n treeMissingDeps = missingDeps;\n }\n\n let targetFileDir;\n\n if (targetFileRelativePath) {\n const { dir } = path.parse(targetFileRelativePath);\n targetFileDir = dir;\n }\n\n const policy = await findAndLoadPolicy(\n root,\n meta.isDocker ? 'docker' : packageManager!,\n options,\n depTree,\n targetFileDir,\n );\n\n const target = await projectMetadata.getInfo(scannedProject, meta, depTree);\n\n if (isGitTarget(target) && target.branch) {\n analytics.add('targetBranch', target.branch);\n }\n\n depTree = dropEmptyDeps(depTree);\n\n let callGraphPayload;\n if (\n options.reachableVulns &&\n (scannedProject.callGraph as CallGraphError)?.innerError\n ) {\n const err = scannedProject.callGraph as CallGraphError;\n analytics.add(\n 'callGraphError',\n abridgeErrorMessage(\n err.innerError.toString(),\n ANALYTICS_PAYLOAD_MAX_LENGTH,\n ),\n );\n alerts.registerAlerts([\n {\n type: 'error',\n name: 'missing-call-graph',\n msg: err.message,\n },\n ]);\n } else if (scannedProject.callGraph) {\n const { callGraph, nodeCount, edgeCount } = serializeCallGraphWithMetrics(\n scannedProject.callGraph as CallGraph,\n );\n debug(\n `Adding call graph to payload, node count: ${nodeCount}, edge count: ${edgeCount}`,\n );\n\n const callGraphMetrics = get(pluginMeta, 'meta.callGraphMetrics', {});\n analytics.add('callGraphMetrics', {\n callGraphEdgeCount: edgeCount,\n callGraphNodeCount: nodeCount,\n ...callGraphMetrics,\n });\n callGraphPayload = callGraph;\n }\n\n if (!depTree) {\n debug(\n 'scannedProject is missing depGraph or depTree, cannot run test/monitor',\n );\n throw new FailedToRunTestError(\n errorMessageWithRetry('Your monitor request could not be completed.'),\n );\n }\n\n const { res, body } = await makeRequest({\n body: {\n meta: {\n method: meta.method,\n hostname: os.hostname(),\n id: snyk.id || depTree.name,\n ci: isCI(),\n pid: process.pid,\n node: process.version,\n master: snyk.config.isMaster,\n name: getNameDepTree(scannedProject, depTree, meta),\n version: depTree.version,\n org: config.org ? decodeURIComponent(config.org) : undefined,\n pluginName: pluginMeta.name,\n pluginRuntime: pluginMeta.runtime,\n missingDeps: treeMissingDeps,\n dockerImageId: pluginMeta.dockerImageId,\n dockerBaseImage: depTree.docker ? depTree.docker.baseImage : undefined,\n dockerfileLayers: depTree.docker\n ? depTree.docker.dockerfileLayers\n : undefined,\n projectName: getProjectName(scannedProject, meta),\n prePruneDepCount, // undefined unless 'prune' is used,\n monitorGraph: false,\n versionBuildInfo: JSON.stringify(scannedProject.meta?.versionBuildInfo),\n gradleProjectName: scannedProject.meta?.gradleProjectName,\n platform: scannedProject.meta?.platform,\n },\n policy: policy ? policy.toString() : undefined,\n package: depTree,\n callGraph: callGraphPayload,\n // we take the targetFile from the plugin,\n // because we want to send it only for specific package-managers\n target,\n // WARNING: be careful changing this as it affects project uniqueness\n targetFile: getTargetFile(scannedProject, pluginMeta),\n targetFileRelativePath,\n targetReference: meta.targetReference,\n contributors,\n projectAttributes,\n tags,\n } as MonitorBody,\n gzip: true,\n method: 'PUT',\n headers: {\n authorization: getAuthHeader(),\n 'content-encoding': 'gzip',\n },\n url: config.API + '/monitor/' + packageManager,\n json: true,\n });\n\n if (res.statusCode && res.statusCode >= 200 && res.statusCode <= 299) {\n return body as MonitorResult;\n } else {\n const userMessage = body && body.userMessage;\n if (!userMessage && res.statusCode === 504) {\n throw new ConnectionTimeoutError();\n } else {\n throw new MonitorError(res.statusCode, userMessage);\n }\n }\n}\n\nexport async function monitorDepGraph(\n root: string,\n meta: MonitorMeta,\n scannedProject: ScannedProject,\n pluginMeta: PluginMetadata,\n options: MonitorOptions & PolicyOptions,\n targetFileRelativePath?: string,\n contributors?: Contributor[],\n projectAttributes?: ProjectAttributes,\n tags?: Tag[],\n): Promise<MonitorResult> {\n const packageManager = meta.packageManager;\n analytics.add('monitorDepGraph', true);\n\n let depGraph = scannedProject.depGraph;\n\n if (!depGraph) {\n debug(\n 'scannedProject is missing depGraph or depTree, cannot run test/monitor',\n );\n throw new FailedToRunTestError(\n 'Your monitor request could not be completed. ',\n );\n }\n\n let targetFileDir;\n\n if (targetFileRelativePath) {\n const { dir } = path.parse(targetFileRelativePath);\n targetFileDir = dir;\n }\n\n const policy = await findAndLoadPolicy(\n root,\n meta.isDocker ? 'docker' : packageManager!,\n options,\n undefined,\n targetFileDir,\n );\n\n const target = await projectMetadata.getInfo(scannedProject, meta);\n if (isGitTarget(target) && target.branch) {\n analytics.add('targetBranch', target.branch);\n }\n\n const pruneIsRequired = options.pruneRepeatedSubdependencies;\n depGraph = await pruneGraph(depGraph, packageManager, pruneIsRequired);\n\n let callGraphPayload;\n if (\n options.reachableVulns &&\n (scannedProject.callGraph as CallGraphError)?.innerError\n ) {\n const err = scannedProject.callGraph as CallGraphError;\n analytics.add(\n 'callGraphError',\n abridgeErrorMessage(\n err.innerError.toString(),\n ANALYTICS_PAYLOAD_MAX_LENGTH,\n ),\n );\n alerts.registerAlerts([\n {\n type: 'error',\n name: 'missing-call-graph',\n msg: err.message,\n },\n ]);\n } else if (scannedProject.callGraph) {\n const { callGraph, nodeCount, edgeCount } = serializeCallGraphWithMetrics(\n scannedProject.callGraph as CallGraph,\n );\n debug(\n `Adding call graph to payload, node count: ${nodeCount}, edge count: ${edgeCount}`,\n );\n\n const callGraphMetrics = get(pluginMeta, 'meta.callGraphMetrics', {});\n analytics.add('callGraphMetrics', {\n callGraphEdgeCount: edgeCount,\n callGraphNodeCount: nodeCount,\n ...callGraphMetrics,\n });\n callGraphPayload = callGraph;\n }\n\n if (!depGraph) {\n debug(\n 'scannedProject is missing depGraph or depTree, cannot run test/monitor',\n );\n throw new FailedToRunTestError(\n errorMessageWithRetry('Your monitor request could not be completed.'),\n );\n }\n\n const { res, body } = await makeRequest({\n body: {\n meta: {\n method: meta.method,\n hostname: os.hostname(),\n id: snyk.id || depGraph.rootPkg.name,\n ci: isCI(),\n pid: process.pid,\n node: process.version,\n master: snyk.config.isMaster,\n name: getNameDepGraph(scannedProject, depGraph, meta),\n version: depGraph.rootPkg.version,\n org: config.org ? decodeURIComponent(config.org) : undefined,\n pluginName: pluginMeta.name,\n pluginRuntime: pluginMeta.runtime,\n projectName: getProjectName(scannedProject, meta),\n monitorGraph: true,\n versionBuildInfo: JSON.stringify(scannedProject.meta?.versionBuildInfo),\n gradleProjectName: scannedProject.meta?.gradleProjectName,\n },\n policy: policy ? policy.toString() : undefined,\n depGraphJSON: depGraph, // depGraph will be auto serialized to JSON on send\n // we take the targetFile from the plugin,\n // because we want to send it only for specific package-managers\n target,\n targetFile: getTargetFile(scannedProject, pluginMeta),\n targetFileRelativePath,\n targetReference: meta.targetReference,\n contributors,\n callGraph: callGraphPayload,\n projectAttributes,\n tags,\n } as MonitorBody,\n gzip: true,\n method: 'PUT',\n headers: {\n authorization: getAuthHeader(),\n 'content-encoding': 'gzip',\n },\n url: `${config.API}/monitor/${packageManager}/graph`,\n json: true,\n });\n\n if (res.statusCode && res.statusCode >= 200 && res.statusCode <= 299) {\n return body as MonitorResult;\n } else {\n const userMessage = body && body.userMessage;\n if (!userMessage && res.statusCode === 504) {\n throw new ConnectionTimeoutError();\n } else {\n throw new MonitorError(res.statusCode, userMessage);\n }\n }\n}\n\nasync function monitorDepGraphFromDepTree(\n root: string,\n meta: MonitorMeta,\n scannedProject: ScannedProject,\n pluginMeta: PluginMetadata,\n options: MonitorOptions & PolicyOptions,\n targetFileRelativePath?: string,\n contributors?: Contributor[],\n projectAttributes?: ProjectAttributes,\n tags?: Tag[],\n): Promise<MonitorResult> {\n const packageManager = meta.packageManager;\n\n let treeMissingDeps: string[] | undefined;\n let depTree = scannedProject.depTree;\n\n if (!depTree) {\n debug(\n 'scannedProject is missing depGraph or depTree, cannot run test/monitor',\n );\n throw new FailedToRunTestError(\n errorMessageWithRetry('Your monitor request could not be completed'),\n );\n }\n\n let targetFileDir;\n\n if (targetFileRelativePath) {\n const { dir } = path.parse(targetFileRelativePath);\n targetFileDir = dir;\n }\n\n const policy = await findAndLoadPolicy(\n root,\n meta.isDocker ? 'docker' : packageManager!,\n options,\n // TODO: fix this and send only send when we used resolve-deps for node\n // it should be a ExpandedPkgTree type instead\n depTree,\n targetFileDir,\n );\n\n if (['npm', 'yarn'].includes(meta.packageManager)) {\n const { filteredDepTree, missingDeps } = filterOutMissingDeps(depTree);\n depTree = filteredDepTree;\n treeMissingDeps = missingDeps;\n }\n\n const depGraph: depGraphLib.DepGraph = await depGraphLib.legacy.depTreeToGraph(\n depTree,\n packageManager,\n );\n const target = await projectMetadata.getInfo(scannedProject, meta, depTree);\n\n if (isGitTarget(target) && target.branch) {\n analytics.add('targetBranch', target.branch);\n }\n\n let prunedGraph = depGraph;\n let prePruneDepCount;\n if (meta.prune) {\n debug('Trying to prune the graph');\n prePruneDepCount = countPathsToGraphRoot(depGraph);\n debug('pre prunedPathsCount: ' + prePruneDepCount);\n prunedGraph = await pruneGraph(depGraph, packageManager, meta.prune);\n }\n\n if (!depTree) {\n debug(\n 'scannedProject is missing depGraph or depTree, cannot run test/monitor',\n );\n throw new FailedToRunTestError(\n errorMessageWithRetry('Your monitor request could not be completed.'),\n );\n }\n const { res, body } = await makeRequest({\n body: {\n meta: {\n method: meta.method,\n hostname: os.hostname(),\n id: snyk.id || depTree.name,\n ci: isCI(),\n pid: process.pid,\n node: process.version,\n master: snyk.config.isMaster,\n name: getNameDepGraph(scannedProject, depGraph, meta),\n version: depGraph.rootPkg.version,\n org: config.org ? decodeURIComponent(config.org) : undefined,\n pluginName: pluginMeta.name,\n pluginRuntime: pluginMeta.runtime,\n dockerImageId: pluginMeta.dockerImageId,\n dockerBaseImage: depTree.docker ? depTree.docker.baseImage : undefined,\n dockerfileLayers: depTree.docker\n ? depTree.docker.dockerfileLayers\n : undefined,\n projectName: getProjectName(scannedProject, meta),\n prePruneDepCount, // undefined unless 'prune' is used\n missingDeps: treeMissingDeps,\n monitorGraph: true,\n },\n policy: policy ? policy.toString() : undefined,\n depGraphJSON: prunedGraph, // depGraph will be auto serialized to JSON on send\n // we take the targetFile from the plugin,\n // because we want to send it only for specific package-managers\n target,\n targetFile: getTargetFile(scannedProject, pluginMeta),\n targetFileRelativePath,\n targetReference: meta.targetReference,\n contributors,\n projectAttributes,\n tags,\n } as MonitorBody,\n gzip: true,\n method: 'PUT',\n headers: {\n authorization: getAuthHeader(),\n 'content-encoding': 'gzip',\n },\n url: `${config.API}/monitor/${packageManager}/graph`,\n json: true,\n });\n\n if (res.statusCode && res.statusCode >= 200 && res.statusCode <= 299) {\n return body as MonitorResult;\n } else {\n const userMessage = body && body.userMessage;\n if (!userMessage && res.statusCode === 504) {\n throw new ConnectionTimeoutError();\n } else {\n throw new MonitorError(res.statusCode, userMessage);\n }\n }\n}\n","import * as depGraphLib from '@snyk/dep-graph';\nimport { DepTree } from '../types';\n\nexport async function pruneTree(\n tree: DepTree,\n packageManagerName: string,\n): Promise<DepTree> {\n // Pruning requires conversion to the graph first.\n // This is slow.\n const graph = await depGraphLib.legacy.depTreeToGraph(\n tree,\n packageManagerName,\n );\n const prunedTree: DepTree = (await depGraphLib.legacy.graphToDepTree(\n graph,\n packageManagerName,\n { deduplicateWithinTopLevelDeps: true },\n )) as DepTree;\n // Transplant pruned dependencies in the original tree (we want to keep all other fields):\n tree.dependencies = prunedTree.dependencies;\n return tree;\n}\n","import { ScannedProject, DepTree } from '@snyk/cli-interface/legacy/common';\nimport {\n getContainerTargetFile,\n getContainerProjectName,\n getContainerName,\n isContainer,\n} from '../container';\nimport * as depGraphLib from '@snyk/dep-graph';\nimport { MonitorMeta } from '../types';\nimport { PluginMetadata } from '@snyk/cli-interface/legacy/plugin';\n\nexport function getNameDepTree(\n scannedProject: ScannedProject,\n depTree: DepTree,\n meta: MonitorMeta,\n): string | undefined {\n if (isContainer(scannedProject)) {\n return getContainerName(scannedProject, meta);\n }\n return depTree.name;\n}\n\nexport function getNameDepGraph(\n scannedProject: ScannedProject,\n depGraph: depGraphLib.DepGraph,\n meta: MonitorMeta,\n): string | undefined {\n if (isContainer(scannedProject)) {\n return getContainerName(scannedProject, meta);\n }\n return depGraph.rootPkg?.name;\n}\n\nexport function getProjectName(\n scannedProject: ScannedProject,\n meta: MonitorMeta,\n): string | undefined {\n if (isContainer(scannedProject)) {\n return getContainerProjectName(scannedProject, meta);\n }\n\n if (meta['project-name'] && scannedProject.meta?.projectName) {\n return scannedProject.meta.projectName;\n }\n\n return meta['project-name'];\n}\n\nexport function getTargetFile(\n scannedProject: ScannedProject,\n pluginMeta: PluginMetadata,\n): string | undefined {\n if (isContainer(scannedProject)) {\n return getContainerTargetFile(scannedProject);\n }\n return pluginMeta.targetFile;\n}\n","import { MonitorOptions, Options, TestOptions } from './types';\nimport config from './config';\nimport { SupportedPackageManagers } from './package-managers';\nimport * as reachableVulns from './reachable-vulns';\nimport { isMultiProjectScan } from './is-multi-project-scan';\nimport { FeatureNotSupportedByPackageManagerError } from './errors';\nimport * as alerts from './alerts';\n\nexport async function validateOptions(\n options: (Options & TestOptions) | (Options & MonitorOptions),\n packageManager?: SupportedPackageManagers,\n): Promise<void> {\n if (options.reachableVulns) {\n // Throwing error only in case when both packageManager and allProjects not defined\n if (!packageManager && !isMultiProjectScan(options)) {\n throw new Error('Could not determine package manager');\n }\n const org = options.org || config.org;\n\n try {\n await reachableVulns.validatePayload(org, options, packageManager);\n } catch (err) {\n if (\n err instanceof FeatureNotSupportedByPackageManagerError &&\n err.feature === 'Reachable vulns' &&\n err.userMessage\n ) {\n alerts.registerAlerts([\n {\n type: 'error',\n name: 'pkgman-not-supported',\n msg: err.userMessage,\n },\n ]);\n } else {\n throw err;\n }\n }\n }\n}\n","import { legacyPlugin as pluginApi } from '@snyk/cli-interface';\nimport { MultiProjectResultCustom } from './get-multi-plugin-result';\nimport { convertScannedProjectsToCustom } from './convert-scanned-projects-to-custom';\nimport { SupportedPackageManagers } from '../package-managers';\n\nexport function convertMultiResultToMultiCustom(\n inspectRes: pluginApi.MultiProjectResult,\n packageManager?: SupportedPackageManagers,\n targetFile?: string,\n): MultiProjectResultCustom {\n // convert all results from the same plugin to MultiProjectResultCustom\n // and annotate each scannedProject with packageManager\n return {\n plugin: inspectRes.plugin,\n scannedProjects: convertScannedProjectsToCustom(\n inspectRes.scannedProjects,\n inspectRes.plugin,\n (inspectRes.plugin.packageManager as SupportedPackageManagers) ||\n packageManager,\n targetFile,\n ),\n };\n}\n","import * as cliInterface from '@snyk/cli-interface';\nimport { ScannedProjectCustom } from './get-multi-plugin-result';\nimport { SupportedPackageManagers } from '../package-managers';\nimport { PluginMetadata } from '@snyk/cli-interface/legacy/plugin';\n\nexport function convertScannedProjectsToCustom(\n scannedProjects: cliInterface.legacyCommon.ScannedProject[],\n pluginMeta: PluginMetadata,\n packageManager?: SupportedPackageManagers,\n targetFile?: string,\n): ScannedProjectCustom[] {\n // annotate the package manager & targetFile to be used\n // for test & monitor\n return scannedProjects.map((a) => {\n (a as ScannedProjectCustom).plugin =\n (a as ScannedProjectCustom).plugin || pluginMeta;\n (a as ScannedProjectCustom).targetFile = a.targetFile || targetFile;\n (a as ScannedProjectCustom).packageManager = (a as ScannedProjectCustom)\n .packageManager\n ? (a as ScannedProjectCustom).packageManager\n : (packageManager as SupportedPackageManagers);\n (a as ScannedProjectCustom).meta = a.meta;\n return a as ScannedProjectCustom;\n });\n}\n","import { legacyPlugin as pluginApi } from '@snyk/cli-interface';\nimport { MultiProjectResultCustom } from './get-multi-plugin-result';\nimport { SupportedPackageManagers } from '../package-managers';\nimport { CallGraph } from '@snyk/cli-interface/legacy/common';\n\nexport function convertSingleResultToMultiCustom(\n inspectRes: pluginApi.SinglePackageResult,\n packageManager?: SupportedPackageManagers,\n): MultiProjectResultCustom {\n if (!packageManager) {\n packageManager = inspectRes.plugin\n .packageManager as SupportedPackageManagers;\n }\n if (inspectRes.dependencyGraph) {\n return convertDepGraphResult(inspectRes, packageManager);\n } else {\n return convertDepTreeResult(inspectRes, packageManager);\n }\n}\n\nfunction convertDepGraphResult(\n inspectRes: pluginApi.SinglePackageResult,\n packageManager: SupportedPackageManagers,\n): MultiProjectResultCustom {\n const { plugin, meta, dependencyGraph: depGraph, callGraph } = inspectRes;\n return {\n plugin,\n scannedProjects: [\n {\n plugin: plugin as any,\n depGraph,\n callGraph: callGraph as CallGraph,\n meta,\n targetFile: plugin.targetFile,\n packageManager,\n },\n ],\n };\n}\n\n/**\n * @deprecated @boost: delete me when all languages uses depGraph\n */\nfunction convertDepTreeResult(\n inspectRes: pluginApi.SinglePackageResult,\n packageManager: SupportedPackageManagers,\n): MultiProjectResultCustom {\n if (\n inspectRes.package &&\n !inspectRes.package.targetFile &&\n inspectRes.plugin\n ) {\n inspectRes.package.targetFile = inspectRes.plugin.targetFile;\n }\n const { plugin, meta, package: depTree, callGraph } = inspectRes;\n\n if (depTree && !depTree.targetFile && plugin) {\n depTree.targetFile = plugin.targetFile;\n }\n\n return {\n plugin,\n scannedProjects: [\n {\n plugin: plugin as any,\n depTree,\n callGraph: callGraph as CallGraph,\n meta,\n targetFile: plugin.targetFile,\n packageManager,\n },\n ],\n };\n}\n","import * as cliInterface from '@snyk/cli-interface';\nimport { ScannedProjectCustom } from './get-multi-plugin-result';\nimport { SupportedPackageManagers } from '../package-managers';\n\nexport function extractPackageManager(\n scannedProject: ScannedProjectCustom,\n pluginRes: cliInterface.legacyPlugin.MultiProjectResult,\n options: {\n packageManager?: SupportedPackageManagers;\n },\n): SupportedPackageManagers | undefined {\n // try and use the package Manager from the plugin\n // result if present\n const packageManager =\n scannedProject.packageManager ||\n (pluginRes.plugin && pluginRes.plugin.packageManager);\n\n if (packageManager) {\n return packageManager;\n }\n\n if (!packageManager && options.packageManager) {\n // fallback to Options packageManager\n return options.packageManager;\n }\n\n // for example: docker\n return undefined;\n}\n","import * as debugModule from 'debug';\nimport * as pathLib from 'path';\nimport chalk from 'chalk';\nimport { icon } from '../theme';\nimport { legacyPlugin as pluginApi } from '@snyk/cli-interface';\nimport { find } from '../find-files';\nimport { Options, TestOptions, MonitorOptions } from '../types';\nimport { NoSupportedManifestsFoundError } from '../errors';\nimport {\n getMultiPluginResult,\n MultiProjectResultCustom,\n} from './get-multi-plugin-result';\nimport { getSinglePluginResult } from './get-single-plugin-result';\nimport {\n detectPackageFile,\n AUTO_DETECTABLE_FILES,\n detectPackageManagerFromFile,\n} from '../detect';\nimport analytics = require('../analytics');\nimport { convertSingleResultToMultiCustom } from './convert-single-splugin-res-to-multi-custom';\nimport { convertMultiResultToMultiCustom } from './convert-multi-plugin-res-to-multi-custom';\nimport { processYarnWorkspaces } from './nodejs-plugin/yarn-workspaces-parser';\nimport { ScannedProject } from '@snyk/cli-interface/legacy/common';\n\nconst debug = debugModule('snyk-test');\n\nconst multiProjectProcessors = {\n yarnWorkspaces: {\n handler: processYarnWorkspaces,\n files: ['package.json'],\n },\n allProjects: {\n handler: getMultiPluginResult,\n files: AUTO_DETECTABLE_FILES,\n },\n};\n\n// Force getDepsFromPlugin to return scannedProjects for processing\nexport async function getDepsFromPlugin(\n root: string,\n options: Options & (TestOptions | MonitorOptions),\n): Promise<pluginApi.MultiProjectResult | MultiProjectResultCustom> {\n let inspectRes: pluginApi.InspectResult;\n\n if (Object.keys(multiProjectProcessors).some((key) => options[key])) {\n const scanType = options.yarnWorkspaces ? 'yarnWorkspaces' : 'allProjects';\n const levelsDeep = options.detectionDepth;\n const ignore = options.exclude ? options.exclude.split(',') : [];\n const { files: targetFiles, allFilesFound } = await find(\n root,\n ignore,\n multiProjectProcessors[scanType].files,\n levelsDeep,\n );\n debug(\n `auto detect manifest files, found ${targetFiles.length}`,\n targetFiles,\n );\n if (targetFiles.length === 0) {\n throw NoSupportedManifestsFoundError([root]);\n }\n // enable full sub-project scan for gradle\n options.allSubProjects = true;\n inspectRes = await multiProjectProcessors[scanType].handler(\n root,\n options,\n targetFiles,\n );\n const scannedProjects = inspectRes.scannedProjects;\n const analyticData = {\n scannedProjects: scannedProjects.length,\n targetFiles,\n packageManagers: targetFiles.map((file) =>\n detectPackageManagerFromFile(file),\n ),\n levelsDeep,\n ignore,\n };\n analytics.add(scanType, analyticData);\n debug(\n `Found ${scannedProjects.length} projects from ${allFilesFound.length} detected manifests`,\n );\n const userWarningMessage = warnSomeGradleManifestsNotScanned(\n scannedProjects,\n allFilesFound,\n root,\n );\n\n if (!options.json && !options.quiet && userWarningMessage) {\n console.warn(chalk.bold.red(userWarningMessage));\n }\n return inspectRes;\n }\n\n // TODO: is this needed for the auto detect handling above?\n // don't override options.file if scanning multiple files at once\n if (!options.scanAllUnmanaged) {\n options.file = options.file || detectPackageFile(root);\n }\n if (!options.docker && !(options.file || options.packageManager)) {\n throw NoSupportedManifestsFoundError([...root]);\n }\n inspectRes = await getSinglePluginResult(root, options);\n\n if (!pluginApi.isMultiResult(inspectRes)) {\n if (!inspectRes.package && !inspectRes.dependencyGraph) {\n // something went wrong if both are not present...\n throw Error(\n `error getting dependencies from ${\n options.docker ? 'docker' : options.packageManager\n } ` + \"plugin: neither 'package' nor 'scannedProjects' were found\",\n );\n }\n\n return convertSingleResultToMultiCustom(inspectRes, options.packageManager);\n }\n // We are using \"options\" to store some information returned from plugin that we need to use later,\n // but don't want to send to Registry in the Payload.\n // TODO(kyegupov): decouple inspect and payload so that we don't need this hack\n (options as any).projectNames = inspectRes.scannedProjects.map(\n (scannedProject) => scannedProject?.depTree?.name,\n );\n return convertMultiResultToMultiCustom(inspectRes, options.packageManager);\n}\n\nexport function warnSomeGradleManifestsNotScanned(\n scannedProjects: ScannedProject[],\n allFilesFound: string[],\n root: string,\n): string | null {\n const gradleTargetFilesFilter = (targetFile) =>\n targetFile &&\n (targetFile.endsWith('build.gradle') ||\n targetFile.endsWith('build.gradle.kts'));\n const scannedGradleFiles = scannedProjects\n .map((p) => {\n const targetFile = p.meta?.targetFile || p.targetFile;\n return targetFile ? pathLib.resolve(root, targetFile) : null;\n })\n .filter(gradleTargetFilesFilter);\n const detectedGradleFiles = allFilesFound.filter(gradleTargetFilesFilter);\n const diff = detectedGradleFiles.filter(\n (file) => !scannedGradleFiles.includes(file),\n );\n\n if (diff.length > 0) {\n debug(\n `These Gradle manifests did not return any dependency results:\\n${diff.join(\n ',\\n',\n )}`,\n );\n return `${icon.ISSUE} ${diff.length}/${detectedGradleFiles.length} detected Gradle manifests did not return dependencies. They may have errored or were not included as part of a multi-project build. You may need to scan them individually with --file=path/to/file. Run with \\`-d\\` for more info.`;\n }\n return null;\n}\n","import { legacyPlugin as pluginApi } from '@snyk/cli-interface';\nimport { find } from '../find-files';\nimport { AUTO_DETECTABLE_FILES } from '../detect';\nimport { Options } from '../types';\n\nexport async function getExtraProjectCount(\n root: string,\n options: Options,\n inspectResult: pluginApi.InspectResult,\n): Promise<number | undefined> {\n if (options.docker || options.unmanaged) {\n return undefined;\n }\n if (\n inspectResult.plugin.meta &&\n inspectResult.plugin.meta.allSubProjectNames &&\n inspectResult.plugin.meta.allSubProjectNames.length > 0\n ) {\n return inspectResult.plugin.meta.allSubProjectNames.length;\n }\n try {\n const { files: extraTargetFiles } = await find(\n root,\n [],\n AUTO_DETECTABLE_FILES,\n );\n const foundProjectsCount =\n extraTargetFiles.length > 1 ? extraTargetFiles.length - 1 : undefined;\n return foundProjectsCount;\n } catch (e) {\n return undefined;\n }\n}\n","import * as cloneDeep from 'lodash.clonedeep';\nimport * as pathLib from 'path';\nimport * as cliInterface from '@snyk/cli-interface';\nimport chalk from 'chalk';\nimport { icon } from '../theme';\nimport * as debugModule from 'debug';\n\nimport { TestOptions, Options, MonitorOptions } from '../types';\nimport { detectPackageManagerFromFile } from '../detect';\nimport { SupportedPackageManagers } from '../package-managers';\nimport { getSinglePluginResult } from './get-single-plugin-result';\nimport { convertSingleResultToMultiCustom } from './convert-single-splugin-res-to-multi-custom';\nimport { convertMultiResultToMultiCustom } from './convert-multi-plugin-res-to-multi-custom';\nimport { PluginMetadata } from '@snyk/cli-interface/legacy/plugin';\nimport { CallGraph } from '@snyk/cli-interface/legacy/common';\nimport { errorMessageWithRetry, FailedToRunTestError } from '../errors';\nimport { processYarnWorkspaces } from './nodejs-plugin/yarn-workspaces-parser';\n\nconst debug = debugModule('snyk-test');\nexport interface ScannedProjectCustom\n extends cliInterface.legacyCommon.ScannedProject {\n packageManager: SupportedPackageManagers;\n plugin: PluginMetadata;\n callGraph?: CallGraph;\n}\n\ninterface FailedProjectScanError {\n targetFile?: string;\n error?: Error;\n errMessage: string;\n}\nexport interface MultiProjectResultCustom\n extends cliInterface.legacyPlugin.MultiProjectResult {\n scannedProjects: ScannedProjectCustom[];\n failedResults?: FailedProjectScanError[];\n}\n\nexport async function getMultiPluginResult(\n root: string,\n options: Options & (TestOptions | MonitorOptions),\n targetFiles: string[],\n): Promise<MultiProjectResultCustom> {\n const allResults: ScannedProjectCustom[] = [];\n const failedResults: FailedProjectScanError[] = [];\n\n // process any yarn workspaces first\n // the files need to be proceeded together as they provide context to each other\n const {\n scannedProjects,\n unprocessedFiles,\n } = await processYarnWorkspacesProjects(root, options, targetFiles);\n allResults.push(...scannedProjects);\n debug(`Not part of a workspace: ${unprocessedFiles.join(', ')}}`);\n // process the rest 1 by 1 sent to relevant plugins\n for (const targetFile of unprocessedFiles) {\n const optionsClone = cloneDeep(options);\n optionsClone.file = pathLib.relative(root, targetFile);\n optionsClone.packageManager = detectPackageManagerFromFile(\n pathLib.basename(targetFile),\n );\n try {\n const inspectRes = await getSinglePluginResult(\n root,\n optionsClone,\n optionsClone.file,\n );\n let resultWithScannedProjects: cliInterface.legacyPlugin.MultiProjectResult;\n\n if (!cliInterface.legacyPlugin.isMultiResult(inspectRes)) {\n resultWithScannedProjects = convertSingleResultToMultiCustom(\n inspectRes,\n optionsClone.packageManager,\n );\n } else {\n resultWithScannedProjects = inspectRes;\n }\n\n const pluginResultWithCustomScannedProjects = convertMultiResultToMultiCustom(\n resultWithScannedProjects,\n optionsClone.packageManager,\n optionsClone.file,\n );\n // annotate the package manager, project name & targetFile to be used\n // for test & monitor\n // TODO: refactor how we display meta to not have to do this\n (options as any).projectNames = resultWithScannedProjects.scannedProjects.map(\n (scannedProject) => scannedProject?.depTree?.name,\n );\n\n allResults.push(...pluginResultWithCustomScannedProjects.scannedProjects);\n } catch (error) {\n const errMessage =\n error.message ?? 'Something went wrong getting dependencies';\n // TODO: propagate this all the way back and include in --json output\n failedResults.push({\n targetFile,\n error,\n errMessage: errMessage,\n });\n debug(\n chalk.bold.red(\n `\\n${icon.ISSUE} Failed to get dependencies for ${targetFile}\\nERROR: ${errMessage}\\n`,\n ),\n );\n }\n }\n\n if (!allResults.length) {\n throw new FailedToRunTestError(\n errorMessageWithRetry(\n `Failed to get dependencies for all ${targetFiles.length} potential projects.`,\n ),\n );\n }\n\n return {\n plugin: {\n name: 'custom-auto-detect',\n },\n scannedProjects: allResults,\n failedResults,\n };\n}\n\nasync function processYarnWorkspacesProjects(\n root: string,\n options: Options & (TestOptions | MonitorOptions),\n targetFiles: string[],\n): Promise<{\n scannedProjects: ScannedProjectCustom[];\n unprocessedFiles: string[];\n}> {\n try {\n const { scannedProjects } = await processYarnWorkspaces(\n root,\n {\n strictOutOfSync: options.strictOutOfSync,\n dev: options.dev,\n },\n targetFiles,\n );\n\n const unprocessedFiles = filterOutProcessedWorkspaces(\n root,\n scannedProjects,\n targetFiles,\n );\n return { scannedProjects, unprocessedFiles };\n } catch (e) {\n debug('Error during detecting or processing Yarn Workspaces: ', e);\n return { scannedProjects: [], unprocessedFiles: targetFiles };\n }\n}\n\nexport function filterOutProcessedWorkspaces(\n root: string,\n scannedProjects: ScannedProjectCustom[],\n allTargetFiles: string[],\n): string[] {\n const targetFiles: string[] = [];\n\n const scanned = scannedProjects\n .map((p) => p.targetFile!)\n .map((p) => pathLib.resolve(process.cwd(), root, p));\n const all = allTargetFiles.map((p) => ({\n path: pathLib.resolve(process.cwd(), root, p),\n original: p,\n }));\n\n for (const entry of all) {\n const { path, original } = entry;\n const { base } = pathLib.parse(path);\n\n if (!['package.json', 'yarn.lock'].includes(base)) {\n targetFiles.push(original);\n continue;\n }\n // standardise to package.json\n // we discover the lockfiles but targetFile is package.json\n if (!scanned.includes(path.replace('yarn.lock', 'package.json'))) {\n targetFiles.push(original);\n continue;\n }\n }\n return targetFiles;\n}\n","import plugins = require('.');\nimport { ModuleInfo } from '../module-info';\nimport { legacyPlugin as pluginApi } from '@snyk/cli-interface';\nimport { TestOptions, Options, MonitorOptions } from '../types';\n\nexport async function getSinglePluginResult(\n root: string,\n options: Options & (TestOptions | MonitorOptions),\n targetFile?: string,\n): Promise<pluginApi.InspectResult> {\n const plugin = plugins.loadPlugin(options.packageManager);\n const moduleInfo = ModuleInfo(plugin, options.policy);\n const inspectRes: pluginApi.InspectResult = await moduleInfo.inspect(\n root,\n targetFile || options.file,\n { ...options },\n );\n return inspectRes;\n}\n","import * as rubygemsPlugin from './rubygems';\nimport * as mvnPlugin from 'snyk-mvn-plugin';\nimport * as gradlePlugin from 'snyk-gradle-plugin';\nimport * as sbtPlugin from 'snyk-sbt-plugin';\nimport * as pythonPlugin from 'snyk-python-plugin';\nimport * as goPlugin from 'snyk-go-plugin';\nimport * as nugetPlugin from 'snyk-nuget-plugin';\nimport * as phpPlugin from 'snyk-php-plugin';\nimport * as nodejsPlugin from './nodejs-plugin';\nimport * as cocoapodsPlugin from '@snyk/snyk-cocoapods-plugin';\nimport * as hexPlugin from '@snyk/snyk-hex-plugin';\nimport * as types from './types';\nimport { SupportedPackageManagers } from '../package-managers';\nimport { UnsupportedPackageManagerError } from '../errors';\n\nexport function loadPlugin(\n packageManager: SupportedPackageManagers | undefined,\n): types.Plugin {\n switch (packageManager) {\n case 'npm': {\n return nodejsPlugin;\n }\n case 'rubygems': {\n return rubygemsPlugin;\n }\n case 'maven': {\n return mvnPlugin;\n }\n case 'gradle': {\n return gradlePlugin;\n }\n case 'sbt': {\n return sbtPlugin;\n }\n case 'yarn': {\n return nodejsPlugin;\n }\n case 'pip':\n case 'poetry': {\n return pythonPlugin;\n }\n case 'golangdep':\n case 'gomodules':\n case 'govendor': {\n return goPlugin;\n }\n case 'nuget': {\n return nugetPlugin;\n }\n case 'paket': {\n return nugetPlugin;\n }\n case 'composer': {\n return phpPlugin;\n }\n case 'cocoapods': {\n return cocoapodsPlugin;\n }\n case 'hex': {\n return hexPlugin;\n }\n default: {\n throw new UnsupportedPackageManagerError(packageManager);\n }\n }\n}\n","import * as modulesParser from './npm-modules-parser';\nimport * as lockParser from './npm-lock-parser';\nimport * as types from '../types';\nimport * as analytics from '../../analytics';\nimport { MissingTargetFileError } from '../../errors/missing-targetfile-error';\nimport { MultiProjectResult } from '@snyk/cli-interface/legacy/plugin';\n\nexport async function inspect(\n root: string,\n targetFile: string,\n options: types.Options = {},\n): Promise<MultiProjectResult> {\n if (!targetFile) {\n throw MissingTargetFileError(root);\n }\n const isLockFileBased =\n targetFile.endsWith('package-lock.json') ||\n targetFile.endsWith('yarn.lock');\n\n const getLockFileDeps = isLockFileBased && !options.traverseNodeModules;\n const depTree: any = getLockFileDeps\n ? await lockParser.parse(root, targetFile, options)\n : await modulesParser.parse(root, targetFile, options);\n\n if (depTree?.meta?.lockfileVersion) {\n analytics.add('lockfileVersion', depTree.meta.lockfileVersion);\n }\n\n return {\n plugin: {\n name: 'snyk-nodejs-lockfile-parser',\n runtime: process.version,\n },\n scannedProjects: [{ depTree }],\n };\n}\n","import * as baseDebug from 'debug';\nconst debug = baseDebug('snyk-test');\nimport * as path from 'path';\nimport { spinner } from '../../spinner';\nimport * as analytics from '../../analytics';\nimport * as fs from 'fs';\nimport * as lockFileParser from 'snyk-nodejs-lockfile-parser';\nimport { PkgTree } from 'snyk-nodejs-lockfile-parser';\nimport { Options } from '../types';\n\nexport async function parse(\n root: string,\n targetFile: string,\n options: Options,\n): Promise<PkgTree> {\n const lockFileFullPath = path.resolve(root, targetFile);\n if (!fs.existsSync(lockFileFullPath)) {\n throw new Error(\n 'Lockfile ' + targetFile + ' not found at location: ' + lockFileFullPath,\n );\n }\n\n const fullPath = path.parse(lockFileFullPath);\n const manifestFileFullPath = path.resolve(fullPath.dir, 'package.json');\n const shrinkwrapFullPath = path.resolve(fullPath.dir, 'npm-shrinkwrap.json');\n\n if (!fs.existsSync(manifestFileFullPath)) {\n throw new Error(\n `Could not find package.json at ${manifestFileFullPath} ` +\n `(lockfile found at ${targetFile})`,\n );\n }\n\n if (fs.existsSync(shrinkwrapFullPath)) {\n throw new Error(\n 'Both `npm-shrinkwrap.json` and `package-lock.json` were found in ' +\n fullPath.dir +\n '.\\n' +\n 'Please run your command again specifying `--file=package.json` flag.',\n );\n }\n\n analytics.add('local', true);\n analytics.add('generating-node-dependency-tree', {\n lockFile: true,\n targetFile,\n });\n const resolveModuleSpinnerLabel = `Analyzing npm dependencies for ${lockFileFullPath}`;\n debug(resolveModuleSpinnerLabel);\n try {\n await spinner(resolveModuleSpinnerLabel);\n const strictOutOfSync = options.strictOutOfSync !== false;\n return lockFileParser.buildDepTreeFromFiles(\n root,\n manifestFileFullPath,\n lockFileFullPath,\n options.dev,\n strictOutOfSync,\n );\n } finally {\n await spinner.clear<void>(resolveModuleSpinnerLabel)();\n }\n}\n","import * as path from 'path';\nimport * as fs from 'fs';\nimport * as resolveNodeDeps from 'snyk-resolve-deps';\nimport * as baseDebug from 'debug';\nconst isEmpty = require('lodash.isempty');\nimport { spinner } from '../../spinner';\nimport * as analytics from '../../analytics';\nimport { Options } from '../types';\nimport { getFileContents } from '../../get-file-contents';\n\nconst debug = baseDebug('snyk-nodejs-plugin');\n\nexport async function parse(\n root: string,\n targetFile: string,\n options: Options,\n): Promise<resolveNodeDeps.PackageExpanded> {\n if (targetFile.endsWith('yarn.lock')) {\n options.file =\n options.file && options.file.replace('yarn.lock', 'package.json');\n }\n\n // package-lock.json falls back to package.json (used in wizard code)\n if (targetFile.endsWith('package-lock.json')) {\n options.file =\n options.file && options.file.replace('package-lock.json', 'package.json');\n }\n // check if there any dependencies\n const packageJsonFileName = path.resolve(root, options.file!);\n const packageManager = options.packageManager || 'npm';\n\n try {\n const packageJson = JSON.parse(\n getFileContents(root, packageJsonFileName).content,\n );\n\n let dependencies = packageJson.dependencies;\n if (options.dev) {\n dependencies = { ...dependencies, ...packageJson.devDependencies };\n }\n if (isEmpty(dependencies)) {\n return new Promise((resolve) =>\n resolve({\n name: packageJson.name || 'package.json',\n dependencies: {},\n version: packageJson.version,\n }),\n );\n }\n } catch (e) {\n debug(`Failed to read ${packageJsonFileName}: Error: ${e}`);\n throw new Error(\n `Failed to read ${packageJsonFileName}. Error: ${e.message}`,\n );\n }\n const nodeModulesPath = path.join(\n path.dirname(path.resolve(root, targetFile)),\n 'node_modules',\n );\n\n if (!fs.existsSync(nodeModulesPath)) {\n // throw a custom error\n throw new Error(\n \"Missing node_modules folder: we can't test \" +\n `without dependencies.\\nPlease run '${packageManager} install' first.`,\n );\n }\n analytics.add('local', true);\n analytics.add('generating-node-dependency-tree', {\n lockFile: false,\n targetFile,\n });\n\n const resolveModuleSpinnerLabel =\n 'Analyzing npm dependencies for ' +\n path.dirname(path.resolve(root, targetFile));\n try {\n await spinner.clear<void>(resolveModuleSpinnerLabel)();\n await spinner(resolveModuleSpinnerLabel);\n return resolveNodeDeps(\n root,\n Object.assign({}, options, { noFromArrays: true }),\n );\n } finally {\n await spinner.clear<void>(resolveModuleSpinnerLabel)();\n }\n}\n","import * as baseDebug from 'debug';\nimport * as pathUtil from 'path';\nconst sortBy = require('lodash.sortby');\nconst groupBy = require('lodash.groupby');\nimport * as micromatch from 'micromatch';\n\nconst debug = baseDebug('snyk-yarn-workspaces');\nimport * as lockFileParser from 'snyk-nodejs-lockfile-parser';\nimport {\n MultiProjectResultCustom,\n ScannedProjectCustom,\n} from '../get-multi-plugin-result';\nimport { getFileContents } from '../../get-file-contents';\nimport { NoSupportedManifestsFoundError } from '../../errors';\n\nexport async function processYarnWorkspaces(\n root: string,\n settings: {\n strictOutOfSync?: boolean;\n dev?: boolean;\n yarnWorkspaces?: boolean;\n },\n targetFiles: string[],\n): Promise<MultiProjectResultCustom> {\n // the order of yarnTargetFiles folders is important\n // must have the root level most folders at the top\n const mappedAndFiltered = targetFiles\n .map((p) => ({ path: p, ...pathUtil.parse(p) }))\n .filter((res) => ['package.json', 'yarn.lock'].includes(res.base));\n const sorted = sortBy(mappedAndFiltered, 'dir');\n const grouped = groupBy(sorted, 'dir');\n\n const yarnTargetFiles: {\n [dir: string]: Array<{\n path: string;\n base: string;\n dir: string;\n }>;\n } = grouped;\n\n debug(`Processing potential Yarn workspaces (${targetFiles.length})`);\n if (settings.yarnWorkspaces && Object.keys(yarnTargetFiles).length === 0) {\n throw NoSupportedManifestsFoundError([root]);\n }\n let yarnWorkspacesMap = {};\n const yarnWorkspacesFilesMap = {};\n const result: MultiProjectResultCustom = {\n plugin: {\n name: 'snyk-nodejs-yarn-workspaces',\n runtime: process.version,\n },\n scannedProjects: [],\n };\n let rootWorkspaceManifestContent = {};\n // the folders must be ordered highest first\n for (const directory of Object.keys(yarnTargetFiles)) {\n debug(`Processing ${directory} as a potential Yarn workspace`);\n let isYarnWorkspacePackage = false;\n let isRootPackageJson = false;\n const packageJsonFileName = pathUtil.join(directory, 'package.json');\n const packageJson = getFileContents(root, packageJsonFileName);\n yarnWorkspacesMap = {\n ...yarnWorkspacesMap,\n ...getWorkspacesMap(packageJson),\n };\n for (const workspaceRoot of Object.keys(yarnWorkspacesMap)) {\n const match = packageJsonBelongsToWorkspace(\n packageJsonFileName,\n yarnWorkspacesMap,\n workspaceRoot,\n );\n if (match) {\n debug(`${packageJsonFileName} matches an existing workspace pattern`);\n yarnWorkspacesFilesMap[packageJsonFileName] = {\n root: workspaceRoot,\n };\n isYarnWorkspacePackage = true;\n }\n if (packageJsonFileName === workspaceRoot) {\n isRootPackageJson = true;\n rootWorkspaceManifestContent = JSON.parse(packageJson.content);\n }\n }\n\n if (!(isYarnWorkspacePackage || isRootPackageJson)) {\n debug(\n `${packageJsonFileName} is not part of any detected workspace, skipping`,\n );\n continue;\n }\n try {\n const rootDir = isYarnWorkspacePackage\n ? pathUtil.dirname(yarnWorkspacesFilesMap[packageJsonFileName].root)\n : pathUtil.dirname(packageJsonFileName);\n const rootYarnLockfileName = pathUtil.join(rootDir, 'yarn.lock');\n const yarnLock = await getFileContents(root, rootYarnLockfileName);\n\n if (\n rootWorkspaceManifestContent.hasOwnProperty('resolutions') &&\n lockFileParser.getYarnLockfileType(yarnLock.content) ===\n lockFileParser.LockfileType.yarn2\n ) {\n const parsedManifestContent = JSON.parse(packageJson.content);\n packageJson.content = JSON.stringify({\n ...parsedManifestContent,\n resolutions: rootWorkspaceManifestContent['resolutions'],\n });\n }\n\n const res = await lockFileParser.buildDepTree(\n packageJson.content,\n yarnLock.content,\n settings.dev,\n lockFileParser.LockfileType.yarn,\n settings.strictOutOfSync !== false,\n );\n const project: ScannedProjectCustom = {\n packageManager: 'yarn',\n targetFile: pathUtil.relative(root, packageJson.fileName),\n depTree: res as any,\n plugin: {\n name: 'snyk-nodejs-lockfile-parser',\n runtime: process.version,\n },\n };\n result.scannedProjects.push(project);\n } catch (e) {\n if (settings.yarnWorkspaces) {\n throw e;\n }\n debug(`Error process workspace: ${packageJsonFileName}. ERROR: ${e}`);\n }\n }\n if (!result.scannedProjects.length) {\n debug(\n `No yarn workspaces detected in any of the ${targetFiles.length} target files.`,\n );\n }\n return result;\n}\n\ninterface YarnWorkspacesMap {\n [packageJsonName: string]: {\n workspaces: string[];\n };\n}\n\nexport function getWorkspacesMap(file: {\n content: string;\n fileName: string;\n}): YarnWorkspacesMap {\n const yarnWorkspacesMap = {};\n if (!file) {\n return yarnWorkspacesMap;\n }\n\n try {\n const rootFileWorkspacesDefinitions = lockFileParser.getYarnWorkspaces(\n file.content,\n );\n\n if (rootFileWorkspacesDefinitions && rootFileWorkspacesDefinitions.length) {\n yarnWorkspacesMap[file.fileName] = {\n workspaces: rootFileWorkspacesDefinitions,\n };\n }\n } catch (e) {\n debug('Failed to process a workspace', e.message);\n }\n return yarnWorkspacesMap;\n}\n\nexport function packageJsonBelongsToWorkspace(\n packageJsonFileName: string,\n yarnWorkspacesMap: YarnWorkspacesMap,\n workspaceRoot: string,\n): boolean {\n const workspaceRootFolder = pathUtil.dirname(\n workspaceRoot.replace(/\\\\/g, '/'),\n );\n const workspacesGlobs = (\n yarnWorkspacesMap[workspaceRoot].workspaces || []\n ).map((workspace) => pathUtil.join(workspaceRootFolder, workspace));\n\n const match = micromatch.isMatch(\n packageJsonFileName.replace(/\\\\/g, '/'),\n workspacesGlobs.map((p) =>\n pathUtil.normalize(pathUtil.join(p, '**')).replace(/\\\\/g, '/'),\n ),\n );\n return match;\n}\n","import { inspectors, Spec } from './inspectors';\nimport { MissingTargetFileError } from '../../errors/missing-targetfile-error';\nimport gemfileLockToDependencies = require('./gemfile-lock-to-dependencies');\nimport * as get from 'lodash.get';\nimport { MultiProjectResult } from '@snyk/cli-interface/legacy/plugin';\nimport * as types from '../types';\n\nexport async function inspect(\n root: string,\n targetFile: string,\n options: types.Options = {},\n): Promise<MultiProjectResult> {\n if (!targetFile) {\n throw MissingTargetFileError(root);\n }\n const specs = await gatherSpecs(root, targetFile, options);\n\n return {\n plugin: {\n name: 'bundled:rubygems',\n runtime: 'unknown',\n },\n scannedProjects: [\n {\n depTree: {\n name: specs.packageName,\n targetFile: specs.targetFile,\n dependencies: getDependenciesFromSpecs(specs),\n },\n },\n ],\n };\n}\n\nfunction getDependenciesFromSpecs(specs) {\n const gemfileLockBase64 = get(specs, 'files.gemfileLock.contents');\n const gemspecBase64 = get(specs, 'files.gemspec.contents');\n const contents = Buffer.from(\n gemfileLockBase64 || gemspecBase64,\n 'base64',\n ).toString();\n const dependencies = gemfileLockToDependencies(contents);\n return dependencies;\n}\n\nasync function gatherSpecs(\n root: string,\n targetFile: string,\n options: types.Options,\n): Promise<Spec> {\n for (const inspector of inspectors) {\n if (inspector.canHandle(targetFile)) {\n return await inspector.gatherSpecs(root, targetFile, options);\n }\n }\n\n throw new Error(`Could not handle rubygems file: ${targetFile}`);\n}\n","import * as path from 'path';\nimport { tryGetSpec } from './try-get-spec';\nimport { Spec } from './index';\nimport * as types from '../../types';\n\n/* Supported example patterns:\n * Gemfile\n * Gemfile.lock\n * rails.2.4.5.gemfile\n * rails.2.4.5.gemfile.lock\n * gemfiles/Gemfile.rails-2.4.5.lock\n * gemfiles/Gemfile.lock.rails-2.4.5\n */\n\nconst gemfileOrLockfilePattern = /.*[gG]emfile.*(\\.lock)?.*$/;\nconst gemfileLockPattern = /.*[gG]emfile.*(\\.lock).*$/;\n\nexport function canHandle(file: string): boolean {\n return !!file && gemfileOrLockfilePattern.test(path.basename(file));\n}\n\nexport async function gatherSpecs(\n root: string,\n target: string,\n options: types.Options,\n): Promise<Spec> {\n const { dir, name } = path.parse(target);\n const isGemfileLock = gemfileLockPattern.test(target);\n // if the target is a Gemfile we treat is as the lockfile\n const gemfileLock = await tryGetSpec(\n root,\n isGemfileLock ? target : path.join(target + '.lock'),\n );\n\n if (gemfileLock) {\n const basePackageName = path.basename(root);\n return {\n packageName: options.allSubProjects\n ? path.join(basePackageName, dir)\n : basePackageName,\n targetFile: path.join(dir, name),\n files: { gemfileLock },\n };\n } else {\n throw new Error(\n `Could not read ${target || 'Gemfile.lock'} lockfile: can't test ` +\n 'without dependencies.\\nPlease run `bundle install` first or' +\n ' if this is a custom file name re-run with --file=path/to/custom.gemfile.lock --package-manager=rubygems',\n );\n }\n}\n","import * as path from 'path';\nimport { Files, tryGetSpec } from './try-get-spec';\nimport { Spec } from './index';\n\nconst pattern = /\\.gemspec$/;\n\nexport function canHandle(file: string): boolean {\n return !!file && pattern.test(file);\n}\n\nexport async function gatherSpecs(root: string, target: string): Promise<Spec> {\n const targetName = path.basename(target);\n const targetDir = path.dirname(target);\n const files: Files = {};\n\n const gemspec = await tryGetSpec(root, path.join(targetDir, targetName));\n\n if (gemspec) {\n files.gemspec = gemspec;\n } else {\n throw new Error(`File not found: ${target}`);\n }\n\n const gemfileLock = await tryGetSpec(\n root,\n path.join(targetDir, 'Gemfile.lock'),\n );\n\n if (gemfileLock) {\n files.gemfileLock = gemfileLock;\n }\n\n return {\n packageName: path.basename(root),\n targetFile: path.join(targetDir, targetName),\n files,\n };\n}\n","import * as gemfile from './gemfile';\nimport * as gemspec from './gemspec';\nimport { Files } from './try-get-spec';\n\nexport interface Spec {\n packageName: string;\n targetFile: string;\n files: Files;\n}\n\nexport const inspectors = [gemfile, gemspec];\n","import * as path from 'path';\nimport * as fs from 'fs';\n\ninterface File {\n name: string;\n contents: string;\n}\n\nexport interface Files {\n gemfileLock?: File;\n gemspec?: File;\n}\n\nexport async function tryGetSpec(\n dir: string,\n name: string,\n): Promise<File | null> {\n const filePath = path.resolve(dir, name);\n if (fs.existsSync(filePath)) {\n return {\n name,\n contents: Buffer.from(fs.readFileSync(filePath)).toString('base64'),\n };\n }\n return null;\n}\n","import {\n analyzeFolders,\n AnalysisSeverity,\n MAX_FILE_SIZE,\n} from '@snyk/code-client';\nimport { ReportingDescriptor, Result } from 'sarif';\nimport { SEVERITY } from '../../snyk-test/legacy';\nimport { api } from '../../api-token';\nimport config from '../../config';\nimport { getBase64Encoding } from '../../code-config';\nimport { spinner } from '../../spinner';\nimport { Options } from '../../types';\nimport { SastSettings, Log } from './types';\nimport { analysisProgressUpdate } from './utils';\nimport {\n FeatureNotSupportedBySnykCodeError,\n MissingConfigurationError,\n} from './errors';\nimport { getProxyForUrl } from 'proxy-from-env';\nimport { bootstrap } from 'global-agent';\nimport chalk from 'chalk';\nimport * as debugLib from 'debug';\nimport { getCodeClientProxyUrl } from '../../code-config';\n\nconst debug = debugLib('snyk-code');\n\nexport async function getCodeAnalysisAndParseResults(\n root: string,\n options: Options,\n sastSettings: SastSettings,\n requestId: string,\n): Promise<Log | null> {\n await spinner.clearAll();\n analysisProgressUpdate();\n const codeAnalysis = await getCodeAnalysis(\n root,\n options,\n sastSettings,\n requestId,\n );\n spinner.clearAll();\n return parseSecurityResults(codeAnalysis);\n}\n\nasync function getCodeAnalysis(\n root: string,\n options: Options,\n sastSettings: SastSettings,\n requestId: string,\n): Promise<Log | null> {\n const isLocalCodeEngineEnabled = isLocalCodeEngine(sastSettings);\n if (isLocalCodeEngineEnabled) {\n validateLocalCodeEngineUrl(sastSettings.localCodeEngine.url);\n }\n\n const source = 'snyk-cli';\n const baseURL = isLocalCodeEngineEnabled\n ? sastSettings.localCodeEngine.url\n : getCodeClientProxyUrl();\n\n const base64Encoding = getBase64Encoding();\n debug(`base64 encoding enabled: ${base64Encoding}`);\n\n // TODO(james) This mirrors the implementation in request.ts and we need to use this for deeproxy calls\n // This ensures we support lowercase http(s)_proxy values as well\n // The weird IF around it ensures we don't create an envvar with\n // a value of undefined, which throws error when trying to use it as a proxy\n if (process.env.HTTP_PROXY || process.env.http_proxy) {\n process.env.HTTP_PROXY = process.env.HTTP_PROXY || process.env.http_proxy;\n }\n if (process.env.HTTPS_PROXY || process.env.https_proxy) {\n process.env.HTTPS_PROXY =\n process.env.HTTPS_PROXY || process.env.https_proxy;\n }\n\n const proxyUrl = getProxyForUrl(baseURL);\n if (proxyUrl) {\n bootstrap({\n environmentVariableNamespace: '',\n });\n }\n\n const sessionToken = api() || '';\n\n const severity = options.severityThreshold\n ? severityToAnalysisSeverity(options.severityThreshold)\n : AnalysisSeverity.info;\n const result = await analyzeFolders({\n connection: { baseURL, sessionToken, source, requestId, base64Encoding },\n analysisOptions: { severity },\n fileOptions: { paths: [root] },\n analysisContext: {\n initiator: 'CLI',\n flow: source,\n orgDisplayName: sastSettings.org,\n projectName: config.PROJECT_NAME,\n org: {\n name: sastSettings.org || 'unknown',\n displayName: 'unknown',\n publicId: 'unknown',\n flags: {},\n },\n },\n languages: sastSettings.supportedLanguages,\n });\n\n if (result?.fileBundle.skippedOversizedFiles?.length) {\n debug(\n '\\n',\n chalk.yellow(\n `Warning!\\nFiles were skipped in the analysis due to their size being greater than ${MAX_FILE_SIZE}B. Skipped files: ${[\n ...result.fileBundle.skippedOversizedFiles,\n ].join(', ')}`,\n ),\n );\n }\n\n if (result?.analysisResults.type === 'sarif') {\n return result.analysisResults.sarif;\n }\n return null;\n}\n\nfunction severityToAnalysisSeverity(severity: SEVERITY): AnalysisSeverity {\n if (severity === SEVERITY.CRITICAL) {\n throw new FeatureNotSupportedBySnykCodeError(SEVERITY.CRITICAL);\n }\n const severityLevel = {\n low: 1,\n medium: 2,\n high: 3,\n };\n return severityLevel[severity];\n}\n\nfunction parseSecurityResults(codeAnalysis: Log | null): Log | null {\n let securityRulesMap;\n\n if (!codeAnalysis) {\n return codeAnalysis;\n }\n\n const rules = codeAnalysis.runs[0].tool.driver.rules;\n const results = codeAnalysis.runs[0].results;\n\n if (rules) {\n securityRulesMap = getSecurityRulesMap(rules);\n codeAnalysis.runs[0].tool.driver.rules = Object.values(securityRulesMap);\n }\n if (results && securityRulesMap) {\n codeAnalysis.runs[0].results = getSecurityResultsOnly(\n results,\n Object.keys(securityRulesMap),\n );\n }\n\n return codeAnalysis;\n}\n\nfunction getSecurityRulesMap(\n rules: ReportingDescriptor[],\n): { [ruleId: string]: ReportingDescriptor[] } {\n const securityRulesMap = rules.reduce((acc, rule) => {\n const { id: ruleId, properties } = rule;\n const isSecurityRule = properties?.categories?.some(\n (category) => category.toLowerCase() === 'security',\n );\n if (isSecurityRule) {\n acc[ruleId] = rule;\n }\n return acc;\n }, {});\n\n return securityRulesMap;\n}\n\nfunction getSecurityResultsOnly(\n results: Result[],\n securityRules: string[],\n): Result[] {\n const securityResults = results.reduce((acc: Result[], result: Result) => {\n const securityRule = securityRules.find((sr) => sr === result?.ruleId);\n if (securityRule) {\n result.ruleIndex = securityRules.indexOf(securityRule);\n acc.push(result);\n }\n return acc;\n }, []);\n\n return securityResults;\n}\n\nfunction isLocalCodeEngine(sastSettings: SastSettings): boolean {\n const { sastEnabled, localCodeEngine } = sastSettings;\n\n return sastEnabled && localCodeEngine.enabled;\n}\n\nfunction validateLocalCodeEngineUrl(localCodeEngineUrl: string): void {\n if (localCodeEngineUrl.length === 0) {\n throw new MissingConfigurationError(\n 'Snyk Code Local Engine. Refer to our docs on https://docs.snyk.io/products/snyk-code/deployment-options/snyk-code-local-engine/cli-and-ide to learn more',\n );\n }\n}\n","import { makeRequest } from '../../request';\n\nimport { getAuthHeader } from '../../api-token';\nimport config from '../../config';\nimport { assembleQueryString } from '../../snyk-test/common';\nimport { SastSettings, TrackUsageResponse } from './types';\n\nexport async function getSastSettingsForOrg(org): Promise<SastSettings> {\n const response = await makeRequest({\n method: 'GET',\n headers: {\n Authorization: getAuthHeader(),\n },\n qs: assembleQueryString({ org }),\n url: `${config.API}/cli-config/settings/sast`,\n gzip: true,\n json: true,\n });\n\n return response.body as SastSettings;\n}\n\nexport async function trackUsage(org): Promise<TrackUsageResponse> {\n const response = await makeRequest({\n method: 'POST',\n headers: {\n Authorization: getAuthHeader(),\n },\n qs: assembleQueryString({ org }),\n url: `${config.API}/track-sast-usage/cli`,\n gzip: true,\n json: true,\n });\n\n return response.body as TrackUsageResponse;\n}\n","export { MissingConfigurationError } from './missing-configuration-error';\nexport { FeatureNotSupportedBySnykCodeError } from './unsupported-feature-snyk-code-error';\n","import { CustomError } from '../../../errors/custom-error';\n\nexport class MissingConfigurationError extends CustomError {\n public readonly action: string;\n\n constructor(action: string, additionalUserHelp = '') {\n super(`Missing configuration for ${action}.`);\n this.code = 422;\n this.action = action;\n\n this.userMessage = `'Configuration is missing or wrong for ${action}'. ${additionalUserHelp}`;\n }\n}\n","import { CustomError } from '../../../errors/custom-error';\n\nexport class FeatureNotSupportedBySnykCodeError extends CustomError {\n public readonly feature: string;\n\n constructor(feature: string, additionalUserHelp = '') {\n super(`Unsupported action for ${feature}.`);\n this.code = 422;\n this.feature = feature;\n\n this.userMessage = `'${feature}' is not supported for snyk code. ${additionalUserHelp}`;\n }\n}\n","import * as Sarif from 'sarif';\nimport * as Debug from 'debug';\nimport chalk from 'chalk';\nimport { icon, color } from '../../../theme';\nimport { colorTextBySeverity, SEVERITY } from '../../../snyk-test/common';\nimport { rightPadWithSpaces } from '../../../right-pad';\nimport { Options } from '../../../types';\nimport { Log } from '../types';\n\nconst debug = Debug('code-output');\n\nexport function getCodeDisplayedOutput(\n codeTest: Log,\n meta: string,\n prefix: string,\n): string {\n let issues: { [index: string]: string[] } = {};\n\n if (codeTest.runs[0].results) {\n const results: Sarif.Result[] = codeTest.runs[0].results;\n\n const rulesMap: {\n [ruleId: string]: Sarif.ReportingDescriptor;\n } = getRulesMap(codeTest.runs[0].tool.driver.rules || []);\n\n issues = getIssues(results, rulesMap);\n }\n\n const issuesText =\n issues.low.join('') + issues.medium.join('') + issues.high.join('');\n const summaryOKText = color.status.success(`${icon.VALID} Test completed`);\n const codeIssueSummary = getCodeIssuesSummary(issues);\n\n return (\n prefix +\n issuesText +\n '\\n' +\n summaryOKText +\n '\\n\\n' +\n meta +\n '\\n\\n' +\n codeIssueSummary\n );\n}\n\nfunction getCodeIssuesSummary(issues: { [index: string]: string[] }): string {\n const lowSeverityText = issues.low.length\n ? colorTextBySeverity(SEVERITY.LOW, ` ${issues.low.length} [Low] `)\n : '';\n const mediumSeverityText = issues.medium.length\n ? colorTextBySeverity(SEVERITY.MEDIUM, ` ${issues.medium.length} [Medium] `)\n : '';\n const highSeverityText = issues.high.length\n ? colorTextBySeverity(SEVERITY.HIGH, `${issues.high.length} [High] `)\n : '';\n\n const codeIssueCount =\n issues.low.length + issues.medium.length + issues.high.length;\n const codeIssueFound = `${codeIssueCount} Code issue${\n codeIssueCount > 0 ? 's' : ''\n } found`;\n const issuesBySeverityText =\n highSeverityText + mediumSeverityText + lowSeverityText;\n const vulnPathsText = color.status.success(\n `${icon.VALID} Awesome! No issues were found.`,\n );\n\n return codeIssueCount > 0\n ? codeIssueFound + '\\n' + issuesBySeverityText\n : vulnPathsText;\n}\n\nfunction getIssues(\n results: Sarif.Result[],\n rulesMap: { [ruleId: string]: Sarif.ReportingDescriptor },\n): { [index: string]: string[] } {\n const issuesInit: { [index: string]: string[] } = {\n low: [],\n medium: [],\n high: [],\n };\n\n const issues = results.reduce((acc, res) => {\n if (res.locations?.length) {\n const location = res.locations[0].physicalLocation;\n if (res.level && location?.artifactLocation && location?.region) {\n const severity = sarifToSeverityLevel(res.level);\n const ruleId = res.ruleId!;\n if (!(ruleId in rulesMap)) {\n debug('Rule ID does not exist in the rules list');\n }\n const ruleName =\n rulesMap[ruleId].shortDescription?.text || rulesMap[ruleId].name;\n const ruleIdSeverityText = colorTextBySeverity(\n severity,\n ` ${icon.ISSUE} [${severity}] ${ruleName}`,\n );\n const artifactLocationUri = location.artifactLocation.uri;\n const startLine = location.region.startLine;\n const text = res.message.text;\n\n const title = ruleIdSeverityText;\n const path = ` Path: ${artifactLocationUri}, line ${startLine}`;\n const info = ` Info: ${text}`;\n acc[severity.toLowerCase()].push(`${title} \\n ${path} \\n ${info}\\n\\n`);\n }\n }\n return acc;\n }, issuesInit);\n\n return issues;\n}\n\nfunction getRulesMap(\n rules: Sarif.ReportingDescriptor[],\n): { [ruleId: string]: Sarif.ReportingDescriptor } {\n const rulesMapByID = rules.reduce((acc, rule) => {\n acc[rule.id] = rule;\n return acc;\n }, {});\n\n return rulesMapByID;\n}\n\nfunction sarifToSeverityLevel(\n sarifConfigurationLevel: Sarif.ReportingConfiguration.level,\n): string {\n const severityLevel = {\n note: 'Low',\n warning: 'Medium',\n error: 'High',\n };\n\n return severityLevel[sarifConfigurationLevel] as string;\n}\n\nexport function getMeta(options: Options, path: string): string {\n const padToLength = 19; // chars to align\n const orgName = options.org;\n const projectPath = options.path || path;\n const meta = [\n chalk.bold(rightPadWithSpaces('Organization: ', padToLength)) + orgName,\n ];\n meta.push(\n chalk.bold(rightPadWithSpaces('Test type: ', padToLength)) +\n 'Static code analysis',\n );\n meta.push(\n chalk.bold(rightPadWithSpaces('Project path: ', padToLength)) + projectPath,\n );\n\n return meta.join('\\n');\n}\n\nexport function getPrefix(path: string): string {\n return chalk.bold.white('\\nTesting ' + path + ' ...\\n\\n');\n}\n","import chalk from 'chalk';\nimport * as debugLib from 'debug';\nimport { v4 as uuidv4 } from 'uuid';\nimport { getCodeAnalysisAndParseResults } from './analysis';\nimport { getSastSettings } from './settings';\nimport {\n getCodeDisplayedOutput,\n getPrefix,\n getMeta,\n} from './format/output-format';\nimport { EcosystemPlugin } from '../../ecosystems/types';\nimport { FailedToRunTestError, NoSupportedSastFiles } from '../../errors';\nimport { jsonStringifyLargeObject } from '../../json';\nimport * as analytics from '../../analytics';\n\nconst debug = debugLib('snyk-code');\n\nexport const codePlugin: EcosystemPlugin = {\n // We currently don't use scan/display. we will need to consolidate ecosystem plugins\n // to accept flows that act differently in the `testDependencies` step, as we have here\n async scan() {\n return null as any;\n },\n async display() {\n return '';\n },\n async test(paths, options) {\n const requestId = uuidv4();\n debug(`Request ID: ${requestId}`);\n try {\n analytics.add('sast-scan', true);\n const sastSettings = await getSastSettings(options);\n // Currently code supports only one path\n const path = paths[0];\n\n const sarifTypedResult = await getCodeAnalysisAndParseResults(\n path,\n options,\n sastSettings,\n requestId,\n );\n\n if (!sarifTypedResult) {\n throw new NoSupportedSastFiles();\n }\n const numOfIssues = sarifTypedResult!.runs?.[0].results?.length || 0;\n analytics.add('sast-issues-found', numOfIssues);\n let newOrg = options.org;\n if (!newOrg && sastSettings.org) {\n newOrg = sastSettings.org;\n }\n const meta = getMeta({ ...options, org: newOrg }, path);\n const prefix = getPrefix(path);\n let readableResult = getCodeDisplayedOutput(\n sarifTypedResult!,\n meta,\n prefix,\n );\n if (numOfIssues > 0 && options['no-markdown']) {\n sarifTypedResult.runs?.[0].results?.forEach(({ message }) => {\n delete message.markdown;\n });\n }\n let sarifResult: string | undefined;\n if (options['sarif-file-output']) {\n sarifResult = jsonStringifyLargeObject(sarifTypedResult);\n }\n let jsonResult: string | undefined;\n if (options['json-file-output']) {\n jsonResult = jsonStringifyLargeObject(sarifTypedResult);\n }\n if (options.sarif || options.json) {\n readableResult = jsonStringifyLargeObject(sarifTypedResult);\n }\n if (numOfIssues > 0) {\n throwIssuesError({ readableResult, sarifResult, jsonResult });\n }\n return sarifResult ? { readableResult, sarifResult } : { readableResult };\n } catch (error) {\n let err: Error;\n if (isCodeClientError(error)) {\n const isUnauthorized = isUnauthorizedError(error)\n ? 'Unauthorized: '\n : '';\n err = new FailedToRunTestError(\n `${isUnauthorized}Failed to run 'code test'`,\n error.statusCode,\n );\n } else if (error instanceof Error) {\n err = error;\n } else if (isUnauthorizedError(error)) {\n err = new FailedToRunTestError(error.message, error.code);\n } else {\n err = new Error(error);\n }\n debug(\n chalk.bold.red(\n `requestId: ${requestId} statusCode:${error.code ||\n error.statusCode}, message: ${error.statusText || error.message}`,\n ),\n );\n throw err;\n }\n },\n};\n\nfunction isCodeClientError(error: object): boolean {\n return (\n error.hasOwnProperty('statusCode') &&\n error.hasOwnProperty('statusText') &&\n error.hasOwnProperty('apiName')\n );\n}\n\nfunction isUnauthorizedError(error: any): boolean {\n return (\n error.statusCode === 401 ||\n error.statusCode === 403 ||\n error.code === 403 ||\n error.code === 401\n );\n}\n\nfunction throwIssuesError(args: {\n readableResult: string;\n sarifResult: string | undefined;\n jsonResult: string | undefined;\n}): Error {\n const err = new Error(args.readableResult) as any;\n err.code = 'VULNS';\n if (args.sarifResult !== undefined) {\n err.sarifStringifiedResults = args.sarifResult;\n }\n if (args.jsonResult !== undefined) {\n err.jsonStringifiedResults = args.jsonResult;\n }\n throw err;\n}\n","import { Options } from '../../types';\nimport { SastSettings } from './types';\nimport config from '../../config';\nimport { getSastSettingsForOrg, trackUsage } from './checks';\n\nimport {\n AuthFailedError,\n FailedToRunTestError,\n FeatureNotSupportedForOrgError,\n NotFoundError,\n} from '../../errors';\n\nexport async function getSastSettings(options: Options): Promise<SastSettings> {\n const org = options.org || config.org;\n\n // This is an unexpected path, code plugin executed for non-code command.\n if (!options.code) {\n throw new FeatureNotSupportedForOrgError(org);\n }\n\n const sastSettingsResponse = await getSastSettingsForOrg(org);\n\n if (\n sastSettingsResponse?.code === 401 ||\n sastSettingsResponse?.code === 403\n ) {\n throw AuthFailedError(\n sastSettingsResponse.error,\n sastSettingsResponse.code,\n );\n }\n\n if (sastSettingsResponse?.code === 404) {\n throw new NotFoundError(sastSettingsResponse?.userMessage);\n }\n\n if (!sastSettingsResponse.sastEnabled) {\n throw new FeatureNotSupportedForOrgError(\n org,\n 'Snyk Code',\n 'enable in Settings > Snyk Code',\n );\n }\n\n const trackUsageResponse = await trackUsage(org);\n if (trackUsageResponse.code === 429) {\n throw new FailedToRunTestError(\n trackUsageResponse.userMessage,\n trackUsageResponse.code,\n );\n }\n return sastSettingsResponse;\n}\n","export { analysisProgressUpdate } from './testEmitter';\n","import { emitter as codeEmitter } from '@snyk/code-client';\nimport { spinner } from '../../../spinner';\nimport * as debugLib from 'debug';\n\nexport function analysisProgressUpdate(): void {\n let currentMessage = '';\n const showSpinner = (message: string): Promise<void> | undefined => {\n if (currentMessage === message) return;\n\n spinner.clear<void>(currentMessage)();\n currentMessage = message;\n return spinner(message);\n };\n\n codeEmitter.on('supportedFilesLoaded', () =>\n showSpinner(`Supported extensions loaded`),\n );\n codeEmitter.on('scanFilesProgress', (processed: number) =>\n showSpinner(`Scanning files: ${Math.round(processed / 100)}00`),\n );\n codeEmitter.on('createBundleProgress', (processed: number, total: number) =>\n showSpinner(`Batching file upload: ${processed} / ${total}`),\n );\n codeEmitter.on('uploadBundleProgress', (processed: number, total: number) =>\n showSpinner(`Upload progress: ${processed} / ${total}`),\n );\n codeEmitter.on('analyseProgress', (data: any) =>\n showSpinner(`${data.status}: ${Math.round(data.progress * 100)}%`),\n );\n codeEmitter.on('sendError', (error) => {\n throw error;\n });\n codeEmitter.on('apiRequestLog', (data) => {\n const debug = debugLib('snyk-code');\n debug('---> API request log ', data);\n });\n}\n","import * as snykPolicyLib from 'snyk-policy';\nimport * as debugModule from 'debug';\nimport { PackageExpanded } from 'snyk-resolve-deps';\n\nimport { pluckPolicies } from '.';\nimport { SupportedPackageManagers } from '../package-managers';\nimport { PackageJson, PolicyOptions } from '../types';\nimport * as analytics from '../analytics';\n\nconst debug = debugModule('snyk');\n\nexport async function findAndLoadPolicy(\n root: string,\n scanType: SupportedPackageManagers | 'docker' | 'iac' | 'cpp',\n options: PolicyOptions,\n pkg?: PackageExpanded,\n scannedProjectFolder?: string,\n): Promise<Policy | undefined> {\n const isDocker = scanType === 'docker';\n const isNodeProject = ['npm', 'yarn'].includes(scanType);\n // monitor\n let policyLocations: string[] = [\n options['policy-path'] || scannedProjectFolder || root,\n ];\n if (isDocker) {\n policyLocations = policyLocations.filter((loc) => loc !== root);\n } else if (isNodeProject) {\n // TODO: pluckPolicies expects a package.json object to\n // find and apply policies in node_modules\n policyLocations = policyLocations.concat(pluckPolicies(pkg as PackageJson));\n }\n\n debug('Potential policy locations found:', policyLocations);\n analytics.add('policies', policyLocations.length);\n analytics.add('policyLocations', policyLocations);\n\n if (policyLocations.length === 0) {\n return;\n }\n let policy;\n try {\n policy = await snykPolicyLib.load(policyLocations, options);\n } catch (err) {\n // note: inline catch, to handle error from .load\n // if the .snyk file wasn't found, it is fine\n if (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n throw err;\n }\n }\n return policy;\n}\n\nexport interface Policy {\n filter(vulns: any, root?: string, matchStrategy?: string): any;\n exclude?: { [key: string]: string[] };\n ignore?: any;\n}\n","export { pluckPolicies } from './pluck-policies';\nexport { findAndLoadPolicy } from './find-and-load-policy';\n","const flatten = require('lodash.flatten');\nimport { PackageExpanded } from 'snyk-resolve-deps';\n\nexport function pluckPolicies(pkg: PackageExpanded): string[] | string {\n if (!pkg) {\n return [];\n }\n\n if (pkg.snyk) {\n return pkg.snyk;\n }\n\n if (!pkg.dependencies) {\n return [];\n }\n\n return flatten(\n Object.keys(pkg.dependencies)\n .map((name: string) => pluckPolicies(pkg.dependencies[name]))\n .filter(Boolean),\n );\n}\n","import { sleep } from '../common';\nimport { ScanResult } from '../ecosystems/types';\nimport { ResolutionMeta } from './types';\n\nexport async function delayNextStep(\n attemptsCount: number,\n maxAttempts: number,\n pollInterval: number,\n): Promise<void> {\n attemptsCount++;\n checkPollingAttempts(maxAttempts)(attemptsCount);\n await sleep(pollInterval);\n}\n\nfunction checkPollingAttempts(maxAttempts: number) {\n return (attemptsCount: number): void | Error => {\n if (attemptsCount > maxAttempts) {\n throw new Error('Exceeded Polling maxAttempts');\n }\n };\n}\n\nexport function extractResolutionMetaFromScanResult({\n name,\n target,\n identity,\n policy,\n targetReference,\n}: ScanResult): ResolutionMeta {\n return {\n name,\n target,\n identity,\n policy,\n targetReference,\n };\n}\n","import config from '../config';\nimport { isCI } from '../is-ci';\nimport { makeRequest } from '../request/promise';\nimport { Contributor, Options } from '../types';\n\nimport { assembleQueryString } from '../../lib/snyk-test/common';\nimport { getAuthHeader } from '../api-token';\nimport { MonitorDependenciesResponse, ScanResult } from '../ecosystems/types';\nimport {\n ResolutionMeta,\n ResolveAndMonitorFactsResponse,\n ResolveFactsState,\n} from './types';\nimport { delayNextStep } from './common';\nimport {\n generateProjectAttributes,\n generateTags,\n} from '../../cli/commands/monitor';\n\nexport async function requestMonitorPollingToken(\n options: Options,\n isAsync: boolean,\n scanResult: ScanResult,\n): Promise<ResolveFactsState> {\n if (scanResult?.target && scanResult.target['remoteUrl'] === '') {\n scanResult.target['remoteUrl'] = scanResult.name;\n }\n\n const payload = {\n method: 'PUT',\n url: `${config.API}/monitor-dependencies`,\n json: true,\n headers: {\n 'x-is-ci': isCI(),\n authorization: getAuthHeader(),\n },\n body: {\n isAsync,\n scanResult,\n method: 'cli',\n },\n qs: { ...assembleQueryString(options) },\n };\n return await makeRequest<ResolveAndMonitorFactsResponse>(payload);\n}\n\nexport async function pollingMonitorWithTokenUntilDone(\n token: string,\n isAsync: boolean,\n options: Options,\n pollInterval: number,\n attemptsCount: number,\n maxAttempts = Infinity,\n resolutionMeta: ResolutionMeta | undefined,\n contributors: Contributor[] = [],\n): Promise<MonitorDependenciesResponse> {\n const payload = {\n method: 'PUT',\n url: `${config.API}/monitor-dependencies/${token}`,\n json: true,\n headers: {\n 'x-is-ci': isCI(),\n authorization: getAuthHeader(),\n },\n qs: { ...assembleQueryString(options) },\n body: {\n isAsync,\n resolutionMeta,\n contributors,\n method: 'cli',\n tags: generateTags(options),\n attributes: generateProjectAttributes(options),\n projectName:\n resolutionMeta?.name || options['project-name'] || config.PROJECT_NAME,\n },\n };\n\n const response = await makeRequest<ResolveAndMonitorFactsResponse>(payload);\n if (response.ok && response.isMonitored) {\n return response;\n }\n\n await delayNextStep(attemptsCount, maxAttempts, pollInterval);\n return await pollingMonitorWithTokenUntilDone(\n token,\n isAsync,\n options,\n pollInterval,\n attemptsCount,\n maxAttempts,\n resolutionMeta,\n contributors,\n );\n}\n","import config from '../config';\nimport { isCI } from '../is-ci';\nimport { makeRequest } from '../request/promise';\nimport { Options } from '../types';\n\nimport { assembleQueryString } from '../snyk-test/common';\nimport { getAuthHeader } from '../api-token';\nimport { ScanResult } from '../ecosystems/types';\n\nimport { ResolveAndTestFactsResponse } from './types';\nimport { delayNextStep } from './common';\nimport { TestDependenciesResult } from '../snyk-test/legacy';\n\nexport async function requestTestPollingToken(\n options: Options,\n isAsync: boolean,\n scanResult: ScanResult,\n): Promise<ResolveAndTestFactsResponse> {\n const payload = {\n method: 'POST',\n url: `${config.API}/test-dependencies`,\n json: true,\n headers: {\n 'x-is-ci': isCI(),\n authorization: getAuthHeader(),\n },\n body: {\n isAsync,\n scanResult,\n },\n qs: assembleQueryString(options),\n };\n return await makeRequest<ResolveAndTestFactsResponse>(payload);\n}\n\nexport async function pollingTestWithTokenUntilDone(\n token: string,\n type: string,\n options: Options,\n pollInterval: number,\n attemptsCount: number,\n maxAttempts = Infinity,\n): Promise<TestDependenciesResult> {\n const payload = {\n method: 'GET',\n url: `${config.API}/test-dependencies/${token}`,\n json: true,\n headers: {\n 'x-is-ci': isCI(),\n authorization: getAuthHeader(),\n },\n qs: { ...assembleQueryString(options), type },\n };\n\n const response = await makeRequest<ResolveAndTestFactsResponse>(payload);\n\n if (response.result) {\n const {\n issues,\n issuesData,\n depGraphData,\n depsFilePaths,\n fileSignaturesDetails,\n } = response.result;\n return {\n issues,\n issuesData,\n depGraphData,\n depsFilePaths,\n fileSignaturesDetails,\n };\n }\n\n await delayNextStep(attemptsCount, maxAttempts, pollInterval);\n return await pollingTestWithTokenUntilDone(\n token,\n type,\n options,\n pollInterval,\n attemptsCount,\n maxAttempts,\n );\n}\n","import config from './config';\nimport * as depGraphLib from '@snyk/dep-graph';\nimport { DepDict, Options, MonitorOptions } from './types';\nimport { legacyCommon as legacyApi } from '@snyk/cli-interface';\nimport { countPathsToGraphRoot } from './utils';\nimport { jsonStringifyLargeObject } from './json';\n\nexport async function maybePrintDepGraph(\n options: Options | MonitorOptions,\n depGraph: depGraphLib.DepGraph,\n) {\n // TODO @boost: remove this logic once we get a valid depGraph print format\n const graphPathsCount = countPathsToGraphRoot(depGraph);\n const hasTooManyPaths = graphPathsCount > config.PRUNE_DEPS_THRESHOLD;\n\n if (!hasTooManyPaths) {\n const depTree = (await depGraphLib.legacy.graphToDepTree(\n depGraph,\n depGraph.pkgManager.name,\n )) as legacyApi.DepTree;\n maybePrintDepTree(options, depTree);\n } else {\n if (options['print-deps']) {\n if (options.json) {\n console.warn(\n '--print-deps --json option not yet supported for large projects. Displaying graph json output instead',\n );\n // TODO @boost: add as output graphviz 'dot' file to visualize?\n console.log(jsonStringifyLargeObject(depGraph.toJSON()));\n } else {\n console.warn(\n '--print-deps option not yet supported for large projects. Try with --json.',\n );\n }\n }\n }\n}\n\n// This option is still experimental and might be deprecated.\n// It might be a better idea to convert it to a command (i.e. do not perform test/monitor).\nexport function maybePrintDepTree(\n options: Options | MonitorOptions,\n rootPackage: legacyApi.DepTree,\n) {\n if (options['print-deps']) {\n if (options.json) {\n // Will produce 2 JSON outputs, one for the deps, one for the vuln scan.\n console.log(jsonStringifyLargeObject(rootPackage));\n } else {\n printDepsForTree({ [rootPackage.name!]: rootPackage });\n }\n }\n}\n\nfunction printDepsForTree(depDict: DepDict, prefix = '') {\n let counter = 0;\n const keys = Object.keys(depDict);\n for (const name of keys) {\n const dep = depDict[name];\n let branch = '├─ ';\n const last = counter === keys.length - 1;\n if (last) {\n branch = '└─ ';\n }\n console.log(\n prefix +\n (prefix ? branch : '') +\n dep.name +\n ' @ ' +\n (dep.version ? dep.version : ''),\n );\n if (dep.dependencies) {\n printDepsForTree(dep.dependencies, prefix + (last ? ' ' : '│ '));\n }\n counter++;\n }\n}\n","import * as gitTargetBuilder from './target-builders/git';\nimport * as containerTargetBuilder from './target-builders/container';\nimport { GitTarget, ContainerTarget } from './types';\nimport { DepTree } from '../types';\nimport { InvalidRemoteUrlError } from '../errors/invalid-remote-url-error';\nimport { ScannedProject } from '@snyk/cli-interface/legacy/common';\n\nconst TARGET_BUILDERS = [containerTargetBuilder, gitTargetBuilder];\ninterface Options {\n 'remote-repo-url'?: string;\n docker?: boolean; // docker is coming from Options/TestOptions\n isDocker?: boolean; // isDocker coming from MonitorMeta\n}\nexport async function getInfo(\n scannedProject: ScannedProject,\n options: Options,\n packageInfo?: DepTree,\n): Promise<GitTarget | ContainerTarget | null> {\n const isFromContainer = options.docker || options.isDocker || false;\n for (const builder of TARGET_BUILDERS) {\n const target = await builder.getInfo({\n isFromContainer,\n scannedProject,\n packageInfo,\n });\n\n if (target) {\n const remoteUrl = options['remote-repo-url'];\n\n if (!remoteUrl) {\n return target;\n }\n\n if (typeof remoteUrl !== 'string') {\n throw new InvalidRemoteUrlError();\n }\n return { ...target, remoteUrl };\n }\n }\n\n return null;\n}\n","import { DepTree } from '../../types';\nimport { ContainerTarget } from '../types';\nimport { ScannedProject } from '@snyk/cli-interface/legacy/common';\n\nexport async function getInfo({\n isFromContainer,\n scannedProject,\n packageInfo,\n}: {\n isFromContainer: boolean;\n scannedProject: ScannedProject;\n packageInfo?: DepTree;\n}): Promise<ContainerTarget | null> {\n // safety check\n if (!isFromContainer) {\n return null;\n }\n\n const imageNameOnProjectMeta =\n scannedProject.meta && scannedProject.meta.imageName;\n return {\n image:\n imageNameOnProjectMeta ||\n (packageInfo as any)?.image ||\n packageInfo?.name,\n };\n}\n","import * as url from 'url';\nimport subProcess = require('../../sub-process');\nimport { GitTarget } from '../types';\n\n// for scp-like syntax [user@]server:project.git\nconst originRegex = /(.+@)?(.+):(.+$)/;\n\nexport async function getInfo({\n isFromContainer,\n cwd,\n}: {\n isFromContainer: boolean;\n cwd?: string;\n}): Promise<GitTarget | null> {\n // safety check\n if (isFromContainer) {\n return null;\n }\n\n const target: GitTarget = {};\n\n try {\n const origin: string | null | undefined = (\n await subProcess.execute('git', ['remote', 'get-url', 'origin'], { cwd })\n ).trim();\n\n if (origin) {\n const { protocol, host, pathname = '' } = url.parse(origin);\n\n // Not handling git:// as it has no connection options\n if (host && protocol && ['ssh:', 'http:', 'https:'].includes(protocol)) {\n // same format for parseable URLs\n target.remoteUrl = `http://${host}${pathname}`;\n } else {\n const originRes = originRegex.exec(origin);\n if (originRes && originRes[2] && originRes[3]) {\n target.remoteUrl = `http://${originRes[2]}/${originRes[3]}`;\n } else {\n // else keep the original\n target.remoteUrl = origin;\n }\n }\n }\n } catch (err) {\n // Swallowing exception since we don't want to break the monitor if there is a problem\n // executing git commands.\n }\n\n try {\n target.branch = (\n await subProcess.execute('git', ['rev-parse', '--abbrev-ref', 'HEAD'], {\n cwd,\n })\n ).trim();\n } catch (err) {\n // Swallowing exception since we don't want to break the monitor if there is a problem\n // executing git commands.\n }\n\n return target;\n}\n","export interface GitTarget {\n remoteUrl?: string;\n branch?: string;\n}\n\nexport interface ContainerTarget {\n image?: string;\n}\n\nexport function isGitTarget(target: any): target is GitTarget {\n return target && (target.branch || target.remoteUrl);\n}\n","import * as _debug from 'debug';\nimport { DepGraph, legacy } from '@snyk/dep-graph';\n\nimport { DepTree } from './types';\nimport config from './config';\nimport { TooManyVulnPaths } from './errors';\nimport * as analytics from '../lib/analytics';\nimport { SupportedPackageManagers } from './package-managers';\nimport { countPathsToGraphRoot } from './utils';\n\nconst debug = _debug('snyk:prune');\n\nconst { depTreeToGraph, graphToDepTree } = legacy;\n\nexport async function pruneGraph(\n depGraph: DepGraph,\n packageManager: SupportedPackageManagers,\n pruneIsRequired = false,\n): Promise<DepGraph> {\n const prePrunePathsCount = countPathsToGraphRoot(depGraph);\n const isDenseGraph = prePrunePathsCount > config.PRUNE_DEPS_THRESHOLD;\n\n debug('rootPkg', depGraph.rootPkg);\n debug('prePrunePathsCount: ' + prePrunePathsCount);\n debug('isDenseGraph', isDenseGraph);\n analytics.add('prePrunedPathsCount', prePrunePathsCount);\n if (isDenseGraph || pruneIsRequired) {\n debug('Trying to prune the graph');\n const pruneStartTime = Date.now();\n const prunedTree = (await graphToDepTree(depGraph, packageManager, {\n deduplicateWithinTopLevelDeps: true,\n })) as DepTree;\n const graphToTreeEndTime = Date.now();\n analytics.add(\n 'prune.graphToTreeDuration',\n graphToTreeEndTime - pruneStartTime,\n );\n const prunedGraph = await depTreeToGraph(prunedTree, packageManager);\n analytics.add('prune.treeToGraphDuration', Date.now() - graphToTreeEndTime);\n const postPrunePathsCount = countPathsToGraphRoot(prunedGraph);\n analytics.add('postPrunedPathsCount', postPrunePathsCount);\n debug('postPrunePathsCount' + postPrunePathsCount);\n if (postPrunePathsCount > config.MAX_PATH_COUNT) {\n debug('Too many paths to process the project');\n //TODO replace the throw below with TooManyPaths we do not calculate vuln paths there\n throw new TooManyVulnPaths();\n }\n return prunedGraph;\n }\n return depGraph;\n}\n","import * as graphlib from '@snyk/graphlib';\nimport { CallGraph } from '@snyk/cli-interface/legacy/common';\n\nimport {\n REACHABLE_VULNS_SUPPORTED_PACKAGE_MANAGERS,\n SupportedPackageManagers,\n} from './package-managers';\nimport { isFeatureFlagSupportedForOrg } from './feature-flags';\nimport {\n AuthFailedError,\n FeatureNotSupportedByPackageManagerError,\n UnsupportedFeatureFlagError,\n} from './errors';\nimport { MonitorOptions, Options, TestOptions } from './types';\nimport { isMultiProjectScan } from './is-multi-project-scan';\n\nconst featureFlag = 'reachableVulns';\n\nexport function serializeCallGraphWithMetrics(\n callGraph: CallGraph,\n): {\n callGraph: any;\n nodeCount: number;\n edgeCount: number;\n} {\n return {\n callGraph: graphlib.json.write(callGraph),\n nodeCount: callGraph.nodeCount(),\n edgeCount: callGraph.edgeCount(),\n };\n}\n\nexport async function validatePayload(\n org: any,\n options: (Options & TestOptions) | (Options & MonitorOptions),\n packageManager?: SupportedPackageManagers,\n): Promise<boolean> {\n if (\n packageManager &&\n !isMultiProjectScan(options) &&\n !REACHABLE_VULNS_SUPPORTED_PACKAGE_MANAGERS.includes(packageManager)\n ) {\n throw new FeatureNotSupportedByPackageManagerError(\n 'Reachable vulns',\n packageManager,\n `For a list of supported package managers go to https://support.snyk.io/hc/en-us/articles/360010554837-Reachable-Vulnerabilities`,\n );\n }\n const reachableVulnsSupportedRes = await isFeatureFlagSupportedForOrg(\n featureFlag,\n org,\n );\n\n if (reachableVulnsSupportedRes.code === 401) {\n throw AuthFailedError(\n reachableVulnsSupportedRes.error,\n reachableVulnsSupportedRes.code,\n );\n }\n if (reachableVulnsSupportedRes.userMessage) {\n throw new UnsupportedFeatureFlagError(\n featureFlag,\n reachableVulnsSupportedRes.userMessage,\n );\n }\n return true;\n}\n","import { getAuthHeader } from '../api-token';\nimport * as request from './index';\n\nexport async function makeRequest<T>(payload: any): Promise<T> {\n return new Promise((resolve, reject) => {\n request.makeRequest(payload, (error, res, body) => {\n if (error) {\n return reject(error);\n }\n if (res.statusCode !== 200) {\n return reject({\n code: res.statusCode,\n message: body?.message,\n });\n }\n resolve(body);\n });\n });\n}\n\n/**\n * All rest request will essentially be the same and are JSON by default\n * Thus if no headers provided default headers are used\n * @param {any} payload for the request\n * @returns\n */\nexport async function makeRequestRest<T>(payload: any): Promise<T> {\n return new Promise((resolve, reject) => {\n payload.headers = payload.headers ?? {\n 'Content-Type': 'application/vnd.api+json',\n authorization: getAuthHeader(),\n };\n payload.json = true;\n request.makeRequest(payload, (error, res, body) => {\n if (error) {\n return reject(error);\n }\n if (res.statusCode >= 400) {\n return reject({\n code: res.statusCode,\n body: JSON.parse(body as any),\n });\n }\n resolve(JSON.parse(body as any) as T);\n });\n });\n}\n","export function rightPadWithSpaces(s: string, padding: number) {\n const padLength = padding - s.length;\n if (padLength <= 0) {\n return s;\n }\n\n return s + ' '.repeat(padLength);\n}\n","import * as path from 'path';\nimport config from '../config';\nimport { isCI } from '../is-ci';\nimport { getPlugin } from '../ecosystems';\nimport { Ecosystem } from '../ecosystems/types';\nimport { Options, PolicyOptions, TestOptions } from '../types';\nimport { Payload } from './types';\nimport { assembleQueryString } from './common';\nimport { spinner } from '../spinner';\nimport { findAndLoadPolicyForScanResult } from '../ecosystems/policy';\nimport { getAuthHeader } from '../../lib/api-token';\nimport { DockerImageNotFoundError } from '../errors';\n\nexport async function assembleEcosystemPayloads(\n ecosystem: Ecosystem,\n options: Options & TestOptions & PolicyOptions,\n): Promise<Payload[]> {\n // For --all-projects packageManager is yet undefined here. Use 'all'\n let analysisTypeText = 'all dependencies for ';\n if (options.docker) {\n analysisTypeText = 'container dependencies for ';\n } else if (options.packageManager) {\n analysisTypeText = options.packageManager + ' dependencies for ';\n }\n\n const spinnerLbl =\n 'Analyzing ' +\n analysisTypeText +\n (path.relative('.', path.join(options.path, options.file || '')) ||\n path.relative('..', '.') + ' project dir');\n\n spinner.clear<void>(spinnerLbl)();\n if (!options.quiet) {\n await spinner(spinnerLbl);\n }\n\n try {\n const plugin = getPlugin(ecosystem);\n const pluginResponse = await plugin.scan(options);\n\n const payloads: Payload[] = [];\n\n // TODO: This is a temporary workaround until the plugins themselves can read policy files and set names!\n for (const scanResult of pluginResponse.scanResults) {\n // WARNING! This mutates the payload. Policy logic should be in the plugin.\n const policy = await findAndLoadPolicyForScanResult(scanResult, options);\n if (policy !== undefined) {\n scanResult.policy = policy.toString();\n }\n\n // WARNING! This mutates the payload. The project name logic should be handled in the plugin.\n scanResult.name =\n options['project-name'] || config.PROJECT_NAME || scanResult.name;\n\n payloads.push({\n method: 'POST',\n url: `${config.API}${options.testDepGraphDockerEndpoint ||\n '/test-dependencies'}`,\n json: true,\n headers: {\n 'x-is-ci': isCI(),\n authorization: getAuthHeader(),\n },\n body: {\n scanResult,\n },\n qs: assembleQueryString(options),\n });\n }\n\n return payloads;\n } catch (error) {\n if (ecosystem === 'docker' && error.message === 'authentication required') {\n throw new DockerImageNotFoundError(options.path);\n }\n if (ecosystem === 'docker' && error.message === 'invalid image format') {\n throw new DockerImageNotFoundError(options.path);\n }\n\n throw error;\n } finally {\n spinner.clear<void>(spinnerLbl)();\n }\n}\n","import * as values from 'lodash.values';\nimport * as depGraphLib from '@snyk/dep-graph';\nimport {\n DepsFilePaths,\n ScanResult,\n FileSignaturesDetails,\n} from '../ecosystems/types';\nimport { SupportedPackageManagers } from '../package-managers';\nimport { Options, SupportedProjectTypes, TestOptions } from '../types';\nimport { SEVERITIES } from './common';\n\ninterface Pkg {\n name: string;\n version?: string;\n}\n\ninterface Patch {\n version: string;\n id: string;\n urls: string[];\n modificationTime: string;\n}\n\nexport enum SEVERITY {\n LOW = 'low',\n MEDIUM = 'medium',\n HIGH = 'high',\n CRITICAL = 'critical',\n}\n\nexport enum REACHABILITY {\n FUNCTION = 'function',\n PACKAGE = 'package',\n NOT_REACHABLE = 'not-reachable',\n NO_INFO = 'no-info',\n}\n\nexport interface VulnMetaData {\n id: string;\n title: string;\n description: string;\n type: 'license' | 'vuln';\n name: string;\n info: string;\n severity: SEVERITY;\n severityValue: number;\n isNew: boolean;\n version: string;\n packageManager: SupportedPackageManagers | 'upstream';\n}\n\nexport interface GroupedVuln {\n list: AnnotatedIssue[];\n metadata: VulnMetaData;\n isIgnored: boolean;\n title: string;\n note: string | false;\n severity: SEVERITY;\n originalSeverity?: SEVERITY;\n isNew: boolean;\n name: string;\n version: string;\n isFixable: boolean;\n fixedIn: string[];\n legalInstructionsArray?: LegalInstruction[];\n reachability?: REACHABILITY;\n}\n\nexport interface LegalInstruction {\n licenseName: string;\n legalContent: string;\n}\nexport interface IssueData {\n id: string;\n packageName: string;\n version: string;\n moduleName?: string;\n below: string; // Vulnerable below version\n semver: {\n vulnerable: string | string[];\n vulnerableHashes?: string[];\n vulnerableByDistro?: {\n [distroNameAndVersion: string]: string[];\n };\n };\n patches: Patch[];\n isNew: boolean;\n description: string;\n title: string;\n severity: SEVERITY;\n fixedIn: string[];\n legalInstructions?: string;\n reachability?: REACHABILITY;\n packageManager?: SupportedProjectTypes;\n}\n\nexport type CallPath = string[];\n\nexport interface ReachableFunctionPaths {\n functionName: string;\n callPaths: CallPath[];\n}\n\nexport interface ReachablePaths {\n pathCount: number;\n paths: ReachableFunctionPaths[];\n}\n\ninterface AnnotatedIssue extends IssueData {\n credit: string[];\n name: string;\n version: string;\n from: string[];\n upgradePath: Array<string | boolean>;\n isUpgradable: boolean;\n isPatchable: boolean;\n severity: SEVERITY;\n originalSeverity?: SEVERITY;\n\n // These fields present for \"node_module\" based scans to allow remediation\n bundled?: any;\n shrinkwrap?: any;\n __filename?: string;\n parentDepType: string;\n\n type?: 'license';\n title: string;\n patch?: any;\n note?: string | false;\n publicationTime?: string;\n\n reachablePaths?: ReachablePaths;\n identifiers?: {\n [name: string]: string[];\n };\n}\n\n// Mixin, to be added to GroupedVuln / AnnotatedIssue\nexport interface DockerIssue {\n nearestFixedInVersion?: string;\n dockerfileInstruction?: any;\n dockerBaseImage?: any;\n}\n\nexport interface IgnoreSettings {\n adminOnly: boolean;\n reasonRequired: boolean;\n disregardFilesystemIgnores: boolean;\n}\n\nexport interface BasicResultData {\n ok: boolean;\n payloadType?: string;\n org: string;\n isPrivate: boolean;\n summary: string;\n packageManager?: SupportedProjectTypes;\n severityThreshold?: string;\n platform?: string;\n}\n\nexport interface LegacyVulnApiResult extends BasicResultData {\n vulnerabilities: AnnotatedIssue[];\n dependencyCount: number;\n policy: string;\n licensesPolicy: object | null;\n ignoreSettings: IgnoreSettings | null;\n docker?: {\n baseImage?: any;\n binariesVulns?: unknown;\n baseImageRemediation?: BaseImageRemediation;\n };\n projectId?: string;\n filesystemPolicy?: boolean;\n uniqueCount?: any;\n remediation?: RemediationChanges;\n}\n\nexport interface BaseImageRemediation {\n code: string;\n advice: BaseImageRemediationAdvice[];\n message?: string; // TODO: check if this is still being sent\n}\n\nexport interface BaseImageRemediationAdvice {\n message: string;\n bold?: boolean;\n color?: string;\n}\n\nexport interface TestResult extends LegacyVulnApiResult {\n targetFile?: string;\n projectName?: string;\n targetFilePath?: string;\n displayTargetFile?: string; // used for display only\n foundProjectCount?: number;\n scanResult?: ScanResult;\n}\n\ninterface UpgradePathItem {\n name: string;\n version: string;\n newVersion?: string;\n isDropped?: boolean;\n}\n\ninterface UpgradePath {\n path: UpgradePathItem[];\n}\n\ninterface FixInfo {\n upgradePaths: UpgradePath[];\n isPatchable: boolean;\n nearestFixedInVersion?: string;\n}\n\nexport interface AffectedPackages {\n [pkgId: string]: {\n pkg: Pkg;\n issues: {\n [issueId: string]: Issue;\n };\n };\n}\n\ninterface TestDepGraphResult {\n issuesData: {\n [issueId: string]: IssueData;\n };\n affectedPkgs: AffectedPackages;\n docker: {\n binariesVulns?: TestDepGraphResult;\n baseImage?: any;\n };\n remediation?: RemediationChanges;\n}\n\ninterface Issue {\n pkgName: string;\n pkgVersion?: string;\n issueId: string;\n fixInfo: FixInfo;\n}\n\nexport interface TestDependenciesResult {\n issuesData: {\n [issueId: string]: IssueData;\n };\n issues: Issue[];\n docker?: {\n baseImage: string;\n baseImageRemediation: BaseImageRemediation;\n binariesVulns: TestDepGraphResult;\n };\n remediation?: RemediationChanges;\n depsFilePaths?: DepsFilePaths;\n depGraphData: depGraphLib.DepGraphData;\n fileSignaturesDetails: FileSignaturesDetails;\n}\n\nexport interface TestDepGraphMeta {\n isPublic: boolean;\n isLicensesEnabled: boolean;\n licensesPolicy?: {\n severities: {\n [type: string]: string;\n };\n };\n projectId?: string;\n ignoreSettings?: IgnoreSettings;\n policy: string;\n org: string;\n}\n\nexport interface TestDepGraphResponse {\n result: TestDepGraphResult;\n meta: TestDepGraphMeta;\n}\n\nexport interface TestDependenciesResponse {\n result: TestDependenciesResult;\n meta: TestDepGraphMeta;\n}\n\nexport interface Ignores {\n [path: string]: {\n paths: string[][];\n meta: {\n days?: number;\n reason?: string;\n };\n };\n}\n\nexport interface PatchObject {\n [name: string]: {\n patched: string;\n };\n}\n\nexport interface Upgrade {\n upgradeTo: string; // name@version\n}\n\nexport interface UpgradeVulns extends Upgrade {\n vulns: string[];\n}\n\nexport interface UpgradeRemediation extends UpgradeVulns {\n upgrades: string[];\n}\n\nexport interface PatchRemediation {\n paths: PatchObject[];\n}\n\nexport interface DependencyUpdates {\n [from: string]: UpgradeRemediation;\n}\n\nexport interface PinRemediation extends UpgradeVulns {\n isTransitive: boolean;\n}\n\nexport interface DependencyPins {\n [name: string]: PinRemediation;\n}\n\n// Remediation changes to be applied to the project,\n// including information on all and unresolved issues.\nexport interface RemediationChanges {\n unresolved: IssueData[];\n upgrade: DependencyUpdates;\n patch: {\n [name: string]: PatchRemediation;\n };\n ignore: unknown;\n pin: DependencyPins;\n}\n\nfunction convertTestDepGraphResultToLegacy(\n res: TestDepGraphResponse,\n depGraph: depGraphLib.DepGraph,\n packageManager: SupportedProjectTypes | undefined,\n options: Options & TestOptions,\n): LegacyVulnApiResult {\n const result = res.result;\n\n const upgradePathsMap = new Map<string, string[]>();\n\n for (const pkgInfo of values(result.affectedPkgs)) {\n for (const pkgIssue of values(pkgInfo.issues)) {\n if (pkgIssue.fixInfo && pkgIssue.fixInfo.upgradePaths) {\n for (const upgradePath of pkgIssue.fixInfo.upgradePaths) {\n const legacyFromPath = pkgPathToLegacyPath(upgradePath.path);\n const vulnPathString = getVulnPathString(\n pkgIssue.issueId,\n legacyFromPath,\n );\n upgradePathsMap[vulnPathString] = toLegacyUpgradePath(\n upgradePath.path,\n );\n }\n }\n }\n }\n\n // generate the legacy vulns array (vuln-data + metada per vulnerable path).\n // use the upgradePathsMap to find available upgrade-paths\n const vulns: AnnotatedIssue[] = [];\n\n for (const pkgInfo of values(result.affectedPkgs)) {\n for (const vulnPkgPath of depGraph.pkgPathsToRoot(pkgInfo.pkg)) {\n const legacyFromPath = pkgPathToLegacyPath(vulnPkgPath.reverse());\n for (const pkgIssue of values(pkgInfo.issues)) {\n const vulnPathString = getVulnPathString(\n pkgIssue.issueId,\n legacyFromPath,\n );\n const upgradePath = upgradePathsMap[vulnPathString] || [];\n\n // TODO: we need the full issue-data for every path only for the --json output,\n // consider picking only the required fields,\n // and append the full data only for --json, to minimize chance of out-of-memory\n const annotatedIssue = Object.assign(\n {},\n result.issuesData[pkgIssue.issueId],\n {\n from: legacyFromPath,\n upgradePath,\n isUpgradable: !!upgradePath[0] || !!upgradePath[1],\n isPatchable: pkgIssue.fixInfo.isPatchable,\n name: pkgInfo.pkg.name,\n version: pkgInfo.pkg.version as string,\n nearestFixedInVersion: pkgIssue.fixInfo.nearestFixedInVersion,\n },\n ) as AnnotatedIssue & DockerIssue; // TODO(kyegupov): get rid of type assertion\n\n vulns.push(annotatedIssue);\n }\n }\n }\n\n const dockerRes = result.docker;\n\n if (dockerRes && dockerRes.binariesVulns) {\n const binariesVulns = dockerRes.binariesVulns;\n for (const pkgInfo of values(binariesVulns.affectedPkgs)) {\n for (const pkgIssue of values(pkgInfo.issues)) {\n const pkgAndVersion = (pkgInfo.pkg.name +\n '@' +\n pkgInfo.pkg.version) as string;\n const annotatedIssue = (Object.assign(\n {},\n binariesVulns.issuesData[pkgIssue.issueId],\n {\n from: ['Upstream', pkgAndVersion],\n upgradePath: [],\n isUpgradable: false,\n isPatchable: false,\n name: pkgInfo.pkg.name,\n version: pkgInfo.pkg.version as string,\n nearestFixedInVersion: pkgIssue.fixInfo.nearestFixedInVersion,\n },\n ) as any) as AnnotatedIssue; // TODO(kyegupov): get rid of forced type assertion\n vulns.push(annotatedIssue);\n }\n }\n }\n\n const meta = res.meta || {};\n\n const severityThreshold =\n options.severityThreshold === SEVERITY.LOW\n ? undefined\n : options.severityThreshold;\n\n const legacyRes: LegacyVulnApiResult = {\n vulnerabilities: vulns,\n ok: vulns.length === 0,\n dependencyCount: depGraph.getPkgs().length - 1,\n org: meta.org,\n policy: meta.policy,\n isPrivate: !meta.isPublic,\n licensesPolicy: meta.licensesPolicy || null,\n packageManager,\n projectId: meta.projectId,\n ignoreSettings: meta.ignoreSettings || null,\n docker: result.docker,\n summary: getSummary(vulns, severityThreshold),\n severityThreshold,\n remediation: result.remediation,\n };\n\n return legacyRes;\n}\n\nfunction getVulnPathString(issueId: string, vulnPath: string[]) {\n return issueId + '|' + JSON.stringify(vulnPath);\n}\n\nfunction pkgPathToLegacyPath(pkgPath: Pkg[]): string[] {\n return pkgPath.map(toLegacyPkgId);\n}\n\nfunction toLegacyUpgradePath(\n upgradePath: UpgradePathItem[],\n): Array<string | boolean> {\n return upgradePath\n .filter((item) => !item.isDropped)\n .map((item) => {\n if (!item.newVersion) {\n return false;\n }\n\n return `${item.name}@${item.newVersion}`;\n });\n}\n\nfunction toLegacyPkgId(pkg: Pkg) {\n return `${pkg.name}@${pkg.version || '*'}`;\n}\n\nfunction getSummary(vulns: object[], severityThreshold?: SEVERITY): string {\n const count = vulns.length;\n let countText = '' + count;\n const severityFilters: string[] = [];\n const severitiesArray = SEVERITIES.map((s) => s.verboseName);\n if (severityThreshold) {\n severitiesArray\n .slice(severitiesArray.indexOf(severityThreshold))\n .forEach((sev) => {\n severityFilters.push(sev);\n });\n }\n\n if (!count) {\n if (severityFilters.length) {\n return `No ${severityFilters.join(' or ')} severity vulnerabilities`;\n }\n return 'No known vulnerabilities';\n }\n\n if (severityFilters.length) {\n countText += ' ' + severityFilters.join(' or ') + ' severity';\n }\n\n return `${countText} vulnerable dependency ${pl('path', count)}`;\n}\n\nfunction pl(word, count) {\n const ext = {\n y: 'ies',\n default: 's',\n };\n\n const last = word.split('').pop();\n\n if (count > 1) {\n return word.slice(0, -1) + (ext[last] || last + ext.default);\n }\n\n return word;\n}\n\nexport { convertTestDepGraphResultToLegacy, AnnotatedIssue };\n","import * as fs from 'fs';\nimport * as get from 'lodash.get';\nimport * as path from 'path';\nimport * as pathUtil from 'path';\nimport * as debugModule from 'debug';\nimport chalk from 'chalk';\nimport { icon } from '../theme';\nimport { parsePackageString as moduleToObject } from 'snyk-module';\nimport * as depGraphLib from '@snyk/dep-graph';\nimport * as theme from '../../lib/theme';\n\nimport {\n AffectedPackages,\n AnnotatedIssue,\n convertTestDepGraphResultToLegacy,\n DockerIssue,\n LegacyVulnApiResult,\n TestDependenciesResponse,\n TestDepGraphResponse,\n TestResult,\n} from './legacy';\nimport {\n AuthFailedError,\n DockerImageNotFoundError,\n FailedToGetVulnerabilitiesError,\n FailedToGetVulnsFromUnavailableResource,\n FailedToRunTestError,\n InternalServerError,\n NoSupportedManifestsFoundError,\n UnsupportedFeatureFlagError,\n NotFoundError,\n errorMessageWithRetry,\n} from '../errors';\nimport * as snyk from '../';\nimport { isCI } from '../is-ci';\nimport * as common from './common';\nimport config from '../config';\nimport * as analytics from '../analytics';\nimport { maybePrintDepGraph, maybePrintDepTree } from '../print-deps';\nimport { ContainerTarget, GitTarget } from '../project-metadata/types';\nimport * as projectMetadata from '../project-metadata';\nimport {\n DepTree,\n Options,\n PolicyOptions,\n SupportedProjectTypes,\n TestOptions,\n} from '../types';\nimport { pruneGraph } from '../prune';\nimport { getDepsFromPlugin } from '../plugins/get-deps-from-plugin';\nimport {\n MultiProjectResultCustom,\n ScannedProjectCustom,\n} from '../plugins/get-multi-plugin-result';\nimport { extractPackageManager } from '../plugins/extract-package-manager';\nimport { getExtraProjectCount } from '../plugins/get-extra-project-count';\nimport { serializeCallGraphWithMetrics } from '../reachable-vulns';\nimport { validateOptions } from '../options-validator';\nimport { findAndLoadPolicy } from '../policy';\nimport {\n Payload,\n PayloadBody,\n DepTreeFromResolveDeps,\n TestDependenciesRequest,\n} from './types';\nimport { CallGraphError, CallGraph } from '@snyk/cli-interface/legacy/common';\nimport * as alerts from '../alerts';\nimport { abridgeErrorMessage } from '../error-format';\nimport { getAuthHeader } from '../api-token';\nimport { getEcosystem } from '../ecosystems';\nimport { Issue } from '../ecosystems/types';\nimport { assembleEcosystemPayloads } from './assemble-payloads';\nimport { makeRequest } from '../request';\nimport { spinner } from '../spinner';\n\nconst debug = debugModule('snyk:run-test');\n\nconst ANALYTICS_PAYLOAD_MAX_LENGTH = 1024;\n\nfunction prepareResponseForParsing(\n payload: Payload,\n response: TestDependenciesResponse,\n options: Options & TestOptions,\n): any {\n const ecosystem = getEcosystem(options);\n return ecosystem\n ? prepareEcosystemResponseForParsing(payload, response, options)\n : prepareLanguagesResponseForParsing(payload);\n}\n\nfunction prepareEcosystemResponseForParsing(\n payload: Payload,\n response: TestDependenciesResponse,\n options: Options & TestOptions,\n) {\n const testDependenciesRequest = payload.body as\n | TestDependenciesRequest\n | undefined;\n const payloadBody = testDependenciesRequest?.scanResult;\n const depGraphData: depGraphLib.DepGraphData | undefined =\n response?.result?.depGraphData;\n const depGraph =\n depGraphData !== undefined\n ? depGraphLib.createFromJSON(depGraphData)\n : undefined;\n const imageUserInstructions = payloadBody?.facts.find(\n (fact) =>\n fact.type === 'dockerfileAnalysis' ||\n fact.type === 'autoDetectedUserInstructions',\n );\n\n const dockerfilePackages = imageUserInstructions?.data?.dockerfilePackages;\n const projectName = payloadBody?.name || depGraph?.rootPkg.name;\n const packageManager = payloadBody?.identity?.type as SupportedProjectTypes;\n const targetFile = payloadBody?.identity?.targetFile || options.file;\n const platform = payloadBody?.identity?.args?.platform;\n\n analytics.add('depGraph', !!depGraph);\n analytics.add('isDocker', !!options.docker);\n\n return {\n depGraph,\n dockerfilePackages,\n projectName,\n targetFile,\n pkgManager: packageManager,\n displayTargetFile: targetFile,\n foundProjectCount: undefined,\n payloadPolicy: payloadBody?.policy,\n platform,\n scanResult: payloadBody,\n };\n}\n\nfunction prepareLanguagesResponseForParsing(payload: Payload) {\n const payloadBody = payload.body as PayloadBody | undefined;\n const payloadPolicy = payloadBody && payloadBody.policy;\n const depGraph = payloadBody && payloadBody.depGraph;\n const pkgManager =\n depGraph &&\n depGraph.pkgManager &&\n (depGraph.pkgManager.name as SupportedProjectTypes);\n const targetFile = payloadBody && payloadBody.targetFile;\n const projectName =\n payloadBody?.projectNameOverride || payloadBody?.originalProjectName;\n const foundProjectCount = payloadBody?.foundProjectCount;\n const displayTargetFile = payloadBody?.displayTargetFile;\n let dockerfilePackages;\n if (\n payloadBody &&\n payloadBody.docker &&\n payloadBody.docker.dockerfilePackages\n ) {\n dockerfilePackages = payloadBody.docker.dockerfilePackages;\n }\n analytics.add('depGraph', !!depGraph);\n analytics.add('isDocker', !!(payloadBody && payloadBody.docker));\n return {\n depGraph,\n payloadPolicy,\n pkgManager,\n targetFile,\n projectName,\n foundProjectCount,\n displayTargetFile,\n dockerfilePackages,\n };\n}\n\nfunction isTestDependenciesResponse(\n response:\n | TestDepGraphResponse\n | TestDependenciesResponse\n | LegacyVulnApiResult,\n): response is TestDependenciesResponse {\n const assumedTestDependenciesResponse = response as TestDependenciesResponse;\n return assumedTestDependenciesResponse?.result?.issues !== undefined;\n}\n\nfunction convertIssuesToAffectedPkgs(\n response:\n | TestDepGraphResponse\n | TestDependenciesResponse\n | LegacyVulnApiResult,\n): TestDepGraphResponse | TestDependenciesResponse | LegacyVulnApiResult {\n if (!(response as any).result) {\n return response;\n }\n\n if (!isTestDependenciesResponse(response)) {\n return response;\n }\n\n response.result['affectedPkgs'] = getAffectedPkgsFromIssues(\n response.result.issues,\n );\n return response;\n}\n\nfunction getAffectedPkgsFromIssues(issues: Issue[]): AffectedPackages {\n const result: AffectedPackages = {};\n\n for (const issue of issues) {\n const packageId = `${issue.pkgName}@${issue.pkgVersion || ''}`;\n\n if (result[packageId] === undefined) {\n result[packageId] = {\n pkg: { name: issue.pkgName, version: issue.pkgVersion },\n issues: {},\n };\n }\n\n result[packageId].issues[issue.issueId] = issue;\n }\n\n return result;\n}\n\nasync function sendAndParseResults(\n payloads: Payload[],\n spinnerLbl: string,\n root: string,\n options: Options & TestOptions,\n): Promise<TestResult[]> {\n const results: TestResult[] = [];\n for (const payload of payloads) {\n await spinner.clear<void>(spinnerLbl)();\n if (!options.quiet) {\n await spinner(spinnerLbl);\n }\n /** sendTestPayload() deletes the request.body from the payload once completed. */\n const payloadCopy = Object.assign({}, payload);\n const res = await sendTestPayload(payload);\n const {\n depGraph,\n payloadPolicy,\n pkgManager,\n targetFile,\n projectName,\n foundProjectCount,\n displayTargetFile,\n dockerfilePackages,\n platform,\n scanResult,\n } = prepareResponseForParsing(\n payloadCopy,\n res as TestDependenciesResponse,\n options,\n );\n\n const ecosystem = getEcosystem(options);\n if (ecosystem && options['print-deps']) {\n await spinner.clear<void>(spinnerLbl)();\n await maybePrintDepGraph(options, depGraph);\n }\n\n const legacyRes = convertIssuesToAffectedPkgs(res);\n\n const result = await parseRes(\n depGraph,\n pkgManager,\n legacyRes as LegacyVulnApiResult,\n options,\n payload,\n payloadPolicy,\n root,\n dockerfilePackages,\n );\n\n results.push({\n ...result,\n targetFile,\n projectName,\n foundProjectCount,\n displayTargetFile,\n platform,\n scanResult,\n });\n }\n return results;\n}\n\nexport async function runTest(\n projectType: SupportedProjectTypes | undefined,\n root: string,\n options: Options & TestOptions,\n): Promise<TestResult[]> {\n const spinnerLbl = 'Querying vulnerabilities database...';\n try {\n await validateOptions(options, options.packageManager);\n const payloads = await assemblePayloads(root, options);\n return await sendAndParseResults(payloads, spinnerLbl, root, options);\n } catch (error) {\n debug('Error running test', { error });\n // handling denial from registry because of the feature flag\n // currently done for go.mod\n const isFeatureNotAllowed =\n error.code === 403 && error.message.includes('Feature not allowed');\n\n const hasFailedToGetVulnerabilities =\n error.code === 404 &&\n error.name.includes('FailedToGetVulnerabilitiesError') &&\n !error.userMessage;\n\n if (isFeatureNotAllowed) {\n throw NoSupportedManifestsFoundError([root]);\n }\n if (hasFailedToGetVulnerabilities) {\n throw FailedToGetVulnsFromUnavailableResource(root, error.code);\n }\n if (\n getEcosystem(options) === 'docker' &&\n error.statusCode === 401 &&\n [\n 'authentication required',\n '{\"details\":\"incorrect username or password\"}\\n',\n ].includes(error.message)\n ) {\n throw new DockerImageNotFoundError(root);\n }\n\n throw new FailedToRunTestError(\n error.userMessage ||\n error.message ||\n `Failed to test ${projectType} project`,\n error.code,\n );\n } finally {\n spinner.clear<void>(spinnerLbl)();\n }\n}\n\nasync function parseRes(\n depGraph: depGraphLib.DepGraph | undefined,\n pkgManager: SupportedProjectTypes | undefined,\n res: LegacyVulnApiResult,\n options: Options & TestOptions,\n payload: Payload,\n payloadPolicy: string | undefined,\n root: string,\n dockerfilePackages: any,\n): Promise<TestResult> {\n // TODO: docker doesn't have a package manager\n // so this flow will not be applicable\n // refactor to separate\n if (depGraph && pkgManager) {\n res = convertTestDepGraphResultToLegacy(\n (res as any) as TestDepGraphResponse, // Double \"as\" required by Typescript for dodgy assertions\n depGraph,\n pkgManager,\n options,\n );\n // For Node.js: inject additional information (for remediation etc.) into the response.\n if (payload.modules) {\n res.dependencyCount =\n payload.modules.numDependencies || depGraph.getPkgs().length - 1;\n if (res.vulnerabilities) {\n res.vulnerabilities.forEach((vuln) => {\n if (payload.modules && payload.modules.pluck) {\n const plucked = payload.modules.pluck(\n vuln.from,\n vuln.name,\n vuln.version,\n );\n vuln.__filename = plucked.__filename;\n vuln.shrinkwrap = plucked.shrinkwrap;\n vuln.bundled = plucked.bundled;\n\n // this is an edgecase when we're testing the directly vuln pkg\n if (vuln.from.length === 1) {\n return;\n }\n\n const parentPkg = moduleToObject(vuln.from[1]);\n const parent = payload.modules.pluck(\n vuln.from.slice(0, 2),\n parentPkg.name,\n parentPkg.version,\n );\n vuln.parentDepType = parent.depType;\n }\n });\n }\n }\n }\n // TODO: is this needed? we filter on the other side already based on policy\n // this will move to be filtered server side soon & it will support `'ignore-policy'`\n analytics.add('vulns-pre-policy', res.vulnerabilities.length);\n res.filesystemPolicy = !!payloadPolicy;\n if (!options['ignore-policy']) {\n res.policy = res.policy || (payloadPolicy as string);\n const policy = await snyk.policy.loadFromText(res.policy);\n res = policy.filter(res, root);\n }\n analytics.add('vulns', res.vulnerabilities.length);\n\n if (res.docker && dockerfilePackages) {\n res.vulnerabilities = res.vulnerabilities.map((vuln) => {\n const dockerfilePackage = dockerfilePackages[vuln.name.split('/')[0]];\n if (dockerfilePackage) {\n (vuln as DockerIssue).dockerfileInstruction =\n dockerfilePackage.installCommand;\n }\n (vuln as DockerIssue).dockerBaseImage = res.docker!.baseImage;\n return vuln;\n });\n }\n if (\n options.docker &&\n res.docker?.baseImage &&\n options['exclude-base-image-vulns']\n ) {\n const filteredVulns = res.vulnerabilities.filter(\n (vuln) => (vuln as DockerIssue).dockerfileInstruction,\n );\n // `exclude-base-image-vulns` might have left us with no vulns, so `ok` is now `true`\n if (\n res.vulnerabilities.length !== 0 &&\n filteredVulns.length === 0 &&\n !res.ok\n ) {\n res.ok = true;\n }\n res.vulnerabilities = filteredVulns;\n }\n\n res.uniqueCount = countUniqueVulns(res.vulnerabilities);\n\n return res;\n}\n\nfunction sendTestPayload(\n payload: Payload,\n): Promise<\n LegacyVulnApiResult | TestDepGraphResponse | TestDependenciesResponse\n> {\n const payloadBody = payload.body as any;\n const filesystemPolicy =\n payload.body && !!(payloadBody?.policy || payloadBody?.scanResult?.policy);\n return new Promise((resolve, reject) => {\n makeRequest(payload, (error, res, body) => {\n if (error) {\n return reject(error);\n }\n if (res.statusCode !== 200) {\n const err = handleTestHttpErrorResponse(res, body);\n return reject(err);\n }\n\n body.filesystemPolicy = filesystemPolicy;\n resolve(body);\n });\n });\n}\n\nfunction handleTestHttpErrorResponse(res, body) {\n const { statusCode } = res;\n let err;\n const userMessage = body && body.userMessage;\n switch (statusCode) {\n case 401:\n case 403:\n err = AuthFailedError(userMessage, statusCode);\n err.innerError = body.stack;\n break;\n case 404:\n err = new NotFoundError(userMessage);\n err.innerError = body.stack;\n break;\n case 405:\n err = new UnsupportedFeatureFlagError('reachableVulns');\n err.innerError = body.stack;\n break;\n case 500:\n err = new InternalServerError(userMessage);\n err.innerError = body.stack;\n break;\n default:\n err = new FailedToGetVulnerabilitiesError(userMessage, statusCode);\n err.innerError = body.error;\n }\n return err;\n}\n\nfunction assemblePayloads(\n root: string,\n options: Options & TestOptions,\n): Promise<Payload[]> {\n let isLocal;\n if (options.docker) {\n isLocal = true;\n } else {\n // TODO: Refactor this check so we don't require files when tests are using mocks\n isLocal = fs.existsSync(root);\n }\n analytics.add('local', isLocal);\n\n const ecosystem = getEcosystem(options);\n if (ecosystem) {\n return assembleEcosystemPayloads(ecosystem, options);\n }\n if (isLocal) {\n return assembleLocalPayloads(root, options);\n }\n return assembleRemotePayloads(root, options);\n}\n\n// Payload to send to the Registry for scanning a package from the local filesystem.\nasync function assembleLocalPayloads(\n root,\n options: Options & TestOptions & PolicyOptions,\n): Promise<Payload[]> {\n // For --all-projects packageManager is yet undefined here. Use 'all'\n let analysisTypeText = 'all dependencies for ';\n if (options.docker) {\n analysisTypeText = 'docker dependencies for ';\n } else if (options.packageManager) {\n analysisTypeText = options.packageManager + ' dependencies for ';\n }\n\n const spinnerLbl =\n 'Analyzing ' +\n analysisTypeText +\n (path.relative('.', path.join(root, options.file || '')) ||\n path.relative('..', '.') + ' project dir');\n\n try {\n const payloads: Payload[] = [];\n await spinner.clear<void>(spinnerLbl)();\n if (!options.quiet) {\n await spinner(spinnerLbl);\n }\n\n const deps = await getDepsFromPlugin(root, options);\n const failedResults = (deps as MultiProjectResultCustom).failedResults;\n if (failedResults?.length) {\n await spinner.clear<void>(spinnerLbl)();\n if (!options.json && !options.quiet) {\n console.warn(\n chalk.bold.red(\n `${icon.ISSUE} ${failedResults.length}/${failedResults.length +\n deps.scannedProjects\n .length} potential projects failed to get dependencies.`,\n ),\n );\n failedResults.forEach((f) => {\n if (f.targetFile) {\n console.warn(theme.color.status.error(`${f.targetFile}:`));\n }\n console.warn(theme.color.status.error(` ${f.errMessage}`));\n });\n }\n debug(\n 'getDepsFromPlugin returned failed results, cannot run test/monitor',\n failedResults,\n );\n if (options['fail-fast']) {\n throw new FailedToRunTestError(\n errorMessageWithRetry('Your test request could not be completed.'),\n );\n }\n }\n analytics.add('pluginName', deps.plugin.name);\n const javaVersion = get(\n deps.plugin,\n 'meta.versionBuildInfo.metaBuildVersion.javaVersion',\n null,\n );\n const mvnVersion = get(\n deps.plugin,\n 'meta.versionBuildInfo.metaBuildVersion.mvnVersion',\n null,\n );\n const sbtVersion = get(\n deps.plugin,\n 'meta.versionBuildInfo.metaBuildVersion.sbtVersion',\n null,\n );\n if (javaVersion) {\n analytics.add('javaVersion', javaVersion);\n }\n if (mvnVersion) {\n analytics.add('mvnVersion', mvnVersion);\n }\n if (sbtVersion) {\n analytics.add('sbtVersion', sbtVersion);\n }\n\n for (const scannedProject of deps.scannedProjects) {\n if (!scannedProject.depTree && !scannedProject.depGraph) {\n debug(\n 'scannedProject is missing depGraph or depTree, cannot run test/monitor',\n );\n throw new FailedToRunTestError(\n errorMessageWithRetry('Your test request could not be completed.'),\n );\n }\n\n // prefer dep-graph fallback on dep tree\n // TODO: clean up once dep-graphs only\n const pkg:\n | DepTree\n | depGraphLib.DepGraph\n | undefined = scannedProject.depGraph\n ? scannedProject.depGraph\n : scannedProject.depTree;\n\n if (options['print-deps']) {\n if (scannedProject.depGraph) {\n await spinner.clear<void>(spinnerLbl)();\n maybePrintDepGraph(options, pkg as depGraphLib.DepGraph);\n } else {\n await spinner.clear<void>(spinnerLbl)();\n maybePrintDepTree(options, pkg as DepTree);\n }\n }\n const project = scannedProject as ScannedProjectCustom;\n const packageManager = extractPackageManager(project, deps, options);\n\n if ((pkg as DepTree).docker) {\n const baseImageFromDockerfile = (pkg as DepTree).docker.baseImage;\n if (!baseImageFromDockerfile && options['base-image']) {\n (pkg as DepTree).docker.baseImage = options['base-image'];\n }\n\n if (baseImageFromDockerfile && deps.plugin && deps.plugin.imageLayers) {\n analytics.add('BaseImage', baseImageFromDockerfile);\n analytics.add('imageLayers', deps.plugin.imageLayers);\n }\n }\n\n // todo: normalize what target file gets used across plugins and functions\n const targetFile =\n scannedProject.targetFile || deps.plugin.targetFile || options.file;\n\n // Forcing options.path to be a string as pathUtil requires is to be stringified\n const targetFileRelativePath = targetFile\n ? pathUtil.resolve(\n pathUtil.resolve(`${options.path || root}`),\n targetFile,\n )\n : '';\n\n let targetFileDir;\n\n if (targetFileRelativePath) {\n const { dir } = path.parse(targetFileRelativePath);\n targetFileDir = dir;\n }\n\n const policy = await findAndLoadPolicy(\n root,\n options.docker ? 'docker' : packageManager!,\n options,\n // TODO: fix this and send only send when we used resolve-deps for node\n // it should be a ExpandedPkgTree type instead\n pkg,\n targetFileDir,\n );\n\n analytics.add('packageManager', packageManager);\n if (scannedProject.depGraph) {\n const depGraph = pkg as depGraphLib.DepGraph;\n addPackageAnalytics(depGraph.rootPkg.name, depGraph.rootPkg.version!);\n }\n if (scannedProject.depTree) {\n const depTree = pkg as DepTree;\n addPackageAnalytics(depTree.name!, depTree.version!);\n }\n\n let target: GitTarget | ContainerTarget | null;\n if (scannedProject.depGraph) {\n target = await projectMetadata.getInfo(scannedProject, options);\n } else {\n target = await projectMetadata.getInfo(\n scannedProject,\n options,\n pkg as DepTree,\n );\n }\n\n const originalProjectName = scannedProject.depGraph\n ? (pkg as depGraphLib.DepGraph).rootPkg.name\n : (pkg as DepTree).name;\n\n const body: PayloadBody = {\n // WARNING: be careful changing this as it affects project uniqueness\n targetFile: project.plugin.targetFile,\n\n // TODO: Remove relativePath prop once we gather enough ruby related logs\n targetFileRelativePath: `${targetFileRelativePath}`, // Forcing string\n targetReference: options['target-reference'],\n projectNameOverride: options.projectName,\n originalProjectName,\n policy: policy ? policy.toString() : undefined,\n foundProjectCount: await getExtraProjectCount(root, options, deps),\n displayTargetFile: targetFile,\n docker: (pkg as DepTree).docker,\n hasDevDependencies: (pkg as any).hasDevDependencies,\n target,\n };\n\n let depGraph: depGraphLib.DepGraph;\n if (scannedProject.depGraph) {\n depGraph = scannedProject.depGraph;\n } else {\n // Graphs are more compact and robust representations.\n // Legacy parts of the code are still using trees, but will eventually be fully migrated.\n debug('converting dep-tree to dep-graph', {\n name: (pkg as DepTree).name,\n targetFile: scannedProject.targetFile || options.file,\n });\n depGraph = await depGraphLib.legacy.depTreeToGraph(\n pkg as DepTree,\n packageManager!,\n );\n debug('done converting dep-tree to dep-graph', {\n uniquePkgsCount: depGraph.getPkgs().length,\n });\n }\n\n const pruneIsRequired = options.pruneRepeatedSubdependencies;\n\n if (packageManager) {\n depGraph = await pruneGraph(depGraph, packageManager, pruneIsRequired);\n }\n body.depGraph = depGraph;\n\n if (\n options.reachableVulns &&\n (scannedProject.callGraph as CallGraphError)?.message\n ) {\n const err = scannedProject.callGraph as CallGraphError;\n const analyticsError = err.innerError || err;\n analytics.add('callGraphError', {\n errorType: analyticsError.constructor?.name,\n message: abridgeErrorMessage(\n analyticsError.message.toString(),\n ANALYTICS_PAYLOAD_MAX_LENGTH,\n ),\n });\n alerts.registerAlerts([\n {\n type: 'error',\n name: 'missing-call-graph',\n msg: err.message,\n },\n ]);\n } else if (scannedProject.callGraph) {\n const {\n callGraph,\n nodeCount,\n edgeCount,\n } = serializeCallGraphWithMetrics(\n scannedProject.callGraph as CallGraph,\n );\n debug(\n `Adding call graph to payload, node count: ${nodeCount}, edge count: ${edgeCount}`,\n );\n\n const callGraphMetrics = get(deps.plugin, 'meta.callGraphMetrics', {});\n analytics.add('callGraphMetrics', {\n callGraphEdgeCount: edgeCount,\n callGraphNodeCount: nodeCount,\n ...callGraphMetrics,\n });\n body.callGraph = callGraph;\n }\n const reqUrl =\n config.API +\n (options.testDepGraphDockerEndpoint ||\n options.vulnEndpoint ||\n '/test-dep-graph');\n const payload: Payload = {\n method: 'POST',\n url: reqUrl,\n json: true,\n headers: {\n 'x-is-ci': isCI(),\n authorization: getAuthHeader(),\n },\n qs: common.assembleQueryString(options),\n body,\n };\n\n if (packageManager && ['yarn', 'npm'].indexOf(packageManager) !== -1) {\n const isLockFileBased =\n targetFile &&\n (targetFile.endsWith('package-lock.json') ||\n targetFile.endsWith('yarn.lock'));\n if (!isLockFileBased || options.traverseNodeModules) {\n payload.modules = pkg as DepTreeFromResolveDeps; // See the output of resolve-deps\n }\n }\n payloads.push(payload);\n }\n return payloads;\n } finally {\n await spinner.clear<void>(spinnerLbl)();\n }\n}\n\n// Payload to send to the Registry for scanning a remote package.\nasync function assembleRemotePayloads(root, options): Promise<Payload[]> {\n const pkg = moduleToObject(root);\n debug('testing remote: %s', pkg.name + '@' + pkg.version);\n addPackageAnalytics(pkg.name, pkg.version);\n const encodedName = encodeURIComponent(pkg.name + '@' + pkg.version);\n // options.vulnEndpoint is only used by `snyk protect` (i.e. local filesystem tests)\n const url = `${config.API}${options.vulnEndpoint ||\n `/vuln/${options.packageManager}`}/${encodedName}`;\n return [\n {\n method: 'GET',\n url,\n qs: common.assembleQueryString(options),\n json: true,\n headers: {\n 'x-is-ci': isCI(),\n authorization: getAuthHeader(),\n },\n },\n ];\n}\n\nfunction addPackageAnalytics(name: string, version: string): void {\n analytics.add('packageName', name);\n analytics.add('packageVersion', version);\n analytics.add('package', name + '@' + version);\n}\n\nfunction countUniqueVulns(vulns: AnnotatedIssue[]): number {\n const seen = {};\n for (const curr of vulns) {\n seen[curr.id] = true;\n }\n return Object.keys(seen).length;\n}\n","import * as childProcess from 'child_process';\n\nexport function execute(\n command: string,\n args: string[],\n options?: { cwd: string | undefined },\n): Promise<string> {\n const spawnOptions: childProcess.SpawnOptions = { shell: true };\n if (options && options.cwd) {\n spawnOptions.cwd = options.cwd;\n }\n\n return new Promise((resolve, reject) => {\n let stdout = '';\n let stderr = '';\n\n const proc = childProcess.spawn(command, args, spawnOptions);\n if (proc.stdout) {\n proc.stdout.on('data', (data) => {\n stdout += data;\n });\n }\n if (proc.stderr) {\n proc.stderr.on('data', (data) => {\n stderr += data;\n });\n }\n\n proc.on('close', (code) => {\n if (code !== 0) {\n return reject(stdout || stderr);\n }\n resolve(stdout || stderr);\n });\n });\n}\n","const snykConfig = require('./config');\n\n// This module is kind of \"world object\" that is used to indirectly import modules.\n// This also introduces some circular imports.\n\n// TODO(kyegupov): untangle this, resolve circular imports, convert to Typescript\n\nconst snyk = {};\nmodule.exports = snyk;\n\nsnyk.id = snykConfig.id;\n\nconst apiToken = require('./api-token');\n\n// make snyk.api *always* get the latest api token from the config store\nObject.defineProperty(snyk, 'api', {\n enumerable: true,\n configurable: true,\n get: function() {\n return apiToken.api();\n },\n set: function(value) {\n snykConfig.api = value;\n },\n});\n\nsnyk.test = require('./snyk-test');\nsnyk.policy = require('snyk-policy');\n\n// this is the user config, and not the internal config\nsnyk.config = require('./user-config').config;\n","const gemfile = require('@snyk/gemfile');\n\nmodule.exports = gemfileLockToDependencies;\n\nconst detectCycles = (dep, chain) => {\n if (chain.indexOf(dep) >= 0) {\n const error = Error('Cyclic dependency detected in lockfile');\n const UNPROCESSABLE_ENTITY = 422;\n error.code = UNPROCESSABLE_ENTITY;\n error.meta = { dep, chain };\n throw error;\n }\n};\n\nconst gemfileReducer = (lockFile, allDeps, ancestors) => (deps, dep) => {\n const gemspec = lockFile.specs[dep];\n // If for some reason a dependency isn't included in the specs then its\n // better to just ignore it (otherwise all processing fails).\n // This happens for bundler itself, it isn't included in the Gemfile.lock\n // specs, even if its a dependency! (and that isn't documented anywhere)\n if (gemspec) {\n detectCycles(dep, ancestors);\n if (allDeps.has(dep)) {\n deps[dep] = allDeps.get(dep);\n } else {\n deps[dep] = {\n name: dep,\n version: gemspec.version,\n };\n allDeps.set(dep, deps[dep]);\n deps[dep].dependencies = Object.keys(gemspec)\n .filter((k) => k !== 'version')\n .reduce(gemfileReducer(lockFile, allDeps, ancestors.concat([dep])), {});\n }\n }\n return deps;\n};\n\nfunction gemfileLockToDependencies(fileContents) {\n const lockFile = gemfile.interpret(fileContents, true);\n\n return (\n Object.keys(lockFile.dependencies || {})\n // this is required to sanitise git deps with no exact version\n // listed as `rspec!`\n .map((dep) => dep.match(/[^!]+/)[0])\n .reduce(gemfileReducer(lockFile, new Map(), []), {})\n );\n}\n","module.exports = test;\n\nconst detect = require('../detect');\nconst { runTest } = require('./run-test');\nconst chalk = require('chalk');\nconst pm = require('../package-managers');\nconst { UnsupportedPackageManagerError } = require('../errors');\nconst { isMultiProjectScan } = require('../is-multi-project-scan');\n\nasync function test(root, options, callback) {\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (!options) {\n options = {};\n }\n const promise = executeTest(root, options);\n if (callback) {\n promise\n .then((res) => {\n callback(null, res);\n })\n .catch(callback);\n }\n return promise;\n}\n\nasync function executeTest(root, options) {\n try {\n if (!options.allProjects) {\n options.packageManager = detect.detectPackageManager(root, options);\n }\n return run(root, options).then((results) => {\n for (const res of results) {\n if (!res.packageManager) {\n res.packageManager = options.packageManager;\n }\n }\n if (results.length === 1) {\n // Return only one result if only one found as this is the default usecase\n return results[0];\n }\n // For gradle, yarnWorkspaces, allProjects we may be returning more than one result\n return results;\n });\n } catch (error) {\n return Promise.reject(\n chalk.red.bold(error.message ? error.message : error),\n );\n }\n}\n\nfunction run(root, options) {\n const projectType = options.packageManager;\n validateProjectType(options, projectType);\n return runTest(projectType, root, options);\n}\n\nfunction validateProjectType(options, projectType) {\n if (\n !(\n options.docker ||\n isMultiProjectScan(options) ||\n pm.SUPPORTED_PACKAGE_MANAGER_NAME[projectType]\n )\n ) {\n throw new UnsupportedPackageManagerError(projectType);\n }\n}\n"],"names":[],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"784.index.js","mappings":"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","sources":["webpack://snyk/./node_modules/@yarnpkg/core/lib|sync","webpack://snyk/./node_modules/keyv/src|sync","webpack://snyk/./src/cli/commands/monitor/index.ts","webpack://snyk/./src/cli/commands/monitor/process-json-monitor.ts","webpack://snyk/./src/cli/commands/process-command-args.ts","webpack://snyk/./src/cli/commands/types.ts","webpack://snyk/./src/lib/code-config.ts","webpack://snyk/./src/lib/constants.ts","webpack://snyk/./src/lib/ecosystems/common.ts","webpack://snyk/./src/lib/ecosystems/index.ts","webpack://snyk/./src/lib/ecosystems/monitor.ts","webpack://snyk/./src/lib/ecosystems/plugin-analytics.ts","webpack://snyk/./src/lib/ecosystems/plugins.ts","webpack://snyk/./src/lib/ecosystems/policy.ts","webpack://snyk/./src/lib/ecosystems/resolve-monitor-facts.ts","webpack://snyk/./src/lib/ecosystems/resolve-test-facts.ts","webpack://snyk/./src/lib/ecosystems/test.ts","webpack://snyk/./src/lib/error-format.ts","webpack://snyk/./src/lib/errors/invalid-remote-url-error.ts","webpack://snyk/./src/lib/feature-flags/index.ts","webpack://snyk/./src/lib/find-files.ts","webpack://snyk/./src/lib/formatters/docker/format-docker-advice.ts","webpack://snyk/./src/lib/formatters/docker/format-docker-binary-heading.ts","webpack://snyk/./src/lib/formatters/docker/format-docker-binary-issues.ts","webpack://snyk/./src/lib/formatters/docker/index.ts","webpack://snyk/./src/lib/formatters/format-error-result-summary.ts","webpack://snyk/./src/lib/formatters/format-monitor-response.ts","webpack://snyk/./src/lib/formatters/format-reachability.ts","webpack://snyk/./src/lib/formatters/format-test-meta.ts","webpack://snyk/./src/lib/formatters/format-vulnerable-result-summary.ts","webpack://snyk/./src/lib/formatters/get-severity-value.ts","webpack://snyk/./src/lib/formatters/iac-output/index.ts","webpack://snyk/./src/lib/formatters/iac-output/v1/index.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/failures/index.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/failures/list.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/failures/tip.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/index.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/issues-list/formatters.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/issues-list/index.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/issues-list/issue.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/share-results.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/test-summary.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/user-messages.ts","webpack://snyk/./src/lib/formatters/iac-output/v2/utils.ts","webpack://snyk/./src/lib/formatters/index.ts","webpack://snyk/./src/lib/formatters/legacy-format-issue.ts","webpack://snyk/./src/lib/formatters/legal-license-instructions.ts","webpack://snyk/./src/lib/formatters/remediation-based-format-issues.ts","webpack://snyk/./src/lib/formatters/sarif-output.ts","webpack://snyk/./src/lib/formatters/show-all-projects-tip.ts","webpack://snyk/./src/lib/formatters/show-all-sub-projects-tip.ts","webpack://snyk/./src/lib/formatters/show-multi-scan-tip.ts","webpack://snyk/./src/lib/get-file-contents.ts","webpack://snyk/./src/lib/iac/constants.ts","webpack://snyk/./src/lib/iac/git.ts","webpack://snyk/./src/lib/is-multi-project-scan.ts","webpack://snyk/./src/lib/json.ts","webpack://snyk/./src/lib/module-info/index.ts","webpack://snyk/./src/lib/monitor/count-total-deps-in-tree.ts","webpack://snyk/./src/lib/monitor/dev-count-analysis.ts","webpack://snyk/./src/lib/monitor/drop-empty-deps.ts","webpack://snyk/./src/lib/monitor/filter-out-missing-deps.ts","webpack://snyk/./src/lib/monitor/index.ts","webpack://snyk/./src/lib/monitor/prune-dep-tree.ts","webpack://snyk/./src/lib/monitor/utils.ts","webpack://snyk/./src/lib/options-validator.ts","webpack://snyk/./src/lib/plugins/convert-multi-plugin-res-to-multi-custom.ts","webpack://snyk/./src/lib/plugins/convert-scanned-projects-to-custom.ts","webpack://snyk/./src/lib/plugins/convert-single-splugin-res-to-multi-custom.ts","webpack://snyk/./src/lib/plugins/extract-package-manager.ts","webpack://snyk/./src/lib/plugins/get-deps-from-plugin.ts","webpack://snyk/./src/lib/plugins/get-extra-project-count.ts","webpack://snyk/./src/lib/plugins/get-multi-plugin-result.ts","webpack://snyk/./src/lib/plugins/get-single-plugin-result.ts","webpack://snyk/./src/lib/plugins/index.ts","webpack://snyk/./src/lib/plugins/nodejs-plugin/index.ts","webpack://snyk/./src/lib/plugins/nodejs-plugin/npm-lock-parser.ts","webpack://snyk/./src/lib/plugins/nodejs-plugin/npm-modules-parser.ts","webpack://snyk/./src/lib/plugins/nodejs-plugin/yarn-workspaces-parser.ts","webpack://snyk/./src/lib/plugins/rubygems/index.ts","webpack://snyk/./src/lib/plugins/rubygems/inspectors/gemfile.ts","webpack://snyk/./src/lib/plugins/rubygems/inspectors/gemspec.ts","webpack://snyk/./src/lib/plugins/rubygems/inspectors/index.ts","webpack://snyk/./src/lib/plugins/rubygems/inspectors/try-get-spec.ts","webpack://snyk/./src/lib/plugins/sast/analysis.ts","webpack://snyk/./src/lib/plugins/sast/checks.ts","webpack://snyk/./src/lib/plugins/sast/errors/index.ts","webpack://snyk/./src/lib/plugins/sast/errors/missing-configuration-error.ts","webpack://snyk/./src/lib/plugins/sast/errors/unsupported-feature-snyk-code-error.ts","webpack://snyk/./src/lib/plugins/sast/format/output-format.ts","webpack://snyk/./src/lib/plugins/sast/index.ts","webpack://snyk/./src/lib/plugins/sast/settings.ts","webpack://snyk/./src/lib/plugins/sast/utils/index.ts","webpack://snyk/./src/lib/plugins/sast/utils/testEmitter.ts","webpack://snyk/./src/lib/policy/find-and-load-policy.ts","webpack://snyk/./src/lib/policy/index.ts","webpack://snyk/./src/lib/policy/pluck-policies.ts","webpack://snyk/./src/lib/polling/common.ts","webpack://snyk/./src/lib/polling/polling-monitor.ts","webpack://snyk/./src/lib/polling/polling-test.ts","webpack://snyk/./src/lib/print-deps.ts","webpack://snyk/./src/lib/project-metadata/index.ts","webpack://snyk/./src/lib/project-metadata/target-builders/container.ts","webpack://snyk/./src/lib/project-metadata/target-builders/git.ts","webpack://snyk/./src/lib/project-metadata/types.ts","webpack://snyk/./src/lib/prune.ts","webpack://snyk/./src/lib/reachable-vulns.ts","webpack://snyk/./src/lib/request/promise.ts","webpack://snyk/./src/lib/right-pad.ts","webpack://snyk/./src/lib/snyk-test/assemble-payloads.ts","webpack://snyk/./src/lib/snyk-test/legacy.ts","webpack://snyk/./src/lib/snyk-test/run-test.ts","webpack://snyk/./src/lib/sub-process.ts","webpack://snyk/./src/lib/index.js","webpack://snyk/./src/lib/plugins/rubygems/gemfile-lock-to-dependencies.js","webpack://snyk/./src/lib/snyk-test/index.js"],"sourcesContent":["function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = () => ([]);\nwebpackEmptyContext.resolve = webpackEmptyContext;\nwebpackEmptyContext.id = 61452;\nmodule.exports = webpackEmptyContext;","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = () => ([]);\nwebpackEmptyContext.resolve = webpackEmptyContext;\nwebpackEmptyContext.id = 3196;\nmodule.exports = webpackEmptyContext;","import chalk from 'chalk';\nimport * as fs from 'fs';\nimport * as Debug from 'debug';\nimport * as pathUtil from 'path';\nimport { legacyPlugin as pluginApi } from '@snyk/cli-interface';\nimport { validateOptions } from '../../../lib/options-validator';\n\nimport {\n MonitorOptions,\n MonitorMeta,\n MonitorResult,\n Options,\n Contributor,\n ProjectAttributes,\n PROJECT_CRITICALITY,\n PROJECT_ENVIRONMENT,\n PROJECT_LIFECYCLE,\n Tag,\n} from '../../../lib/types';\nimport config from '../../../lib/config';\nimport * as detect from '../../../lib/detect';\nimport { GoodResult, BadResult } from './types';\nimport { spinner } from '../../../lib/spinner';\nimport * as analytics from '../../../lib/analytics';\nimport { MethodArgs } from '../../args';\nimport { apiOrOAuthTokenExists } from '../../../lib/api-token';\nimport { maybePrintDepTree, maybePrintDepGraph } from '../../../lib/print-deps';\nimport { monitor as snykMonitor } from '../../../lib/monitor';\nimport { processJsonMonitorResponse } from './process-json-monitor';\nimport snyk = require('../../../lib'); // TODO(kyegupov): fix import\nimport { formatMonitorOutput } from '../../../lib/formatters';\nimport { getDepsFromPlugin } from '../../../lib/plugins/get-deps-from-plugin';\nimport { getExtraProjectCount } from '../../../lib/plugins/get-extra-project-count';\nimport { extractPackageManager } from '../../../lib/plugins/extract-package-manager';\nimport { MultiProjectResultCustom } from '../../../lib/plugins/get-multi-plugin-result';\nimport { convertMultiResultToMultiCustom } from '../../../lib/plugins/convert-multi-plugin-res-to-multi-custom';\nimport { convertSingleResultToMultiCustom } from '../../../lib/plugins/convert-single-splugin-res-to-multi-custom';\nimport { PluginMetadata } from '@snyk/cli-interface/legacy/plugin';\nimport { getContributors } from '../../../lib/monitor/dev-count-analysis';\nimport {\n FailedToRunTestError,\n MonitorError,\n MissingArgError,\n ValidationError,\n} from '../../../lib/errors';\nimport { isMultiProjectScan } from '../../../lib/is-multi-project-scan';\nimport { getEcosystem, monitorEcosystem } from '../../../lib/ecosystems';\nimport { getFormattedMonitorOutput } from '../../../lib/ecosystems/monitor';\nimport { processCommandArgs } from '../process-command-args';\n\nconst SEPARATOR = '\\n-------------------------------------------------------\\n';\nconst debug = Debug('snyk');\n\n// This is used instead of `let x; try { x = await ... } catch { cleanup }` to avoid\n// declaring the type of x as possibly undefined.\nasync function promiseOrCleanup<T>(\n p: Promise<T>,\n cleanup: (x?) => void,\n): Promise<T> {\n return p.catch((error) => {\n cleanup();\n throw error;\n });\n}\n\n// Returns an array of Registry responses (one per every sub-project scanned), a single response,\n// or an error message.\nexport default async function monitor(...args0: MethodArgs): Promise<any> {\n const { options, paths } = processCommandArgs(...args0);\n const results: Array<GoodResult | BadResult> = [];\n\n if (options.id) {\n snyk.id = options.id;\n }\n\n if (options.allSubProjects && options['project-name']) {\n throw new Error(\n '`--all-sub-projects` is currently not compatible with `--project-name`',\n );\n }\n\n if (options.docker && options['remote-repo-url']) {\n throw new Error('`--remote-repo-url` is not supported for container scans');\n }\n\n // Handles no image arg provided to the container command until\n // a validation interface is implemented in the docker plugin.\n if (options.docker && paths.length === 0) {\n throw new MissingArgError();\n }\n\n apiOrOAuthTokenExists();\n\n let contributors: Contributor[] = [];\n if (!options.docker && analytics.allowAnalytics()) {\n try {\n contributors = await getContributors();\n } catch (err) {\n debug('error getting repo contributors', err);\n }\n }\n\n const ecosystem = getEcosystem(options);\n if (ecosystem) {\n const commandResult = await monitorEcosystem(\n ecosystem,\n paths,\n options,\n contributors,\n );\n\n const [monitorResults, monitorErrors] = commandResult;\n\n return await getFormattedMonitorOutput(\n results,\n monitorResults,\n monitorErrors,\n options,\n );\n }\n\n // Part 1: every argument is a scan target; process them sequentially\n for (const path of paths) {\n debug(`Processing ${path}...`);\n try {\n validateMonitorPath(path, options.docker);\n let analysisType = 'all';\n let packageManager;\n if (isMultiProjectScan(options)) {\n analysisType = 'all';\n } else if (options.docker) {\n analysisType = 'docker';\n } else {\n packageManager = detect.detectPackageManager(path, options);\n }\n\n await validateOptions(\n options as Options & MonitorOptions,\n packageManager,\n );\n\n const targetFile =\n !options.scanAllUnmanaged && options.docker && !options.file // snyk monitor --docker (without --file)\n ? undefined\n : options.file || detect.detectPackageFile(path);\n\n const displayPath = pathUtil.relative(\n '.',\n pathUtil.join(path, targetFile || ''),\n );\n\n const analyzingDepsSpinnerLabel =\n 'Analyzing ' +\n (packageManager ? packageManager : analysisType) +\n ' dependencies for ' +\n displayPath;\n\n await spinner(analyzingDepsSpinnerLabel);\n\n // Scan the project dependencies via a plugin\n debug('getDepsFromPlugin ...');\n\n // each plugin will be asked to scan once per path\n // some return single InspectResult & newer ones return Multi\n const inspectResult = await promiseOrCleanup(\n getDepsFromPlugin(path, {\n ...options,\n path,\n packageManager,\n }),\n spinner.clear(analyzingDepsSpinnerLabel),\n );\n analytics.add('pluginName', inspectResult.plugin.name);\n\n // We send results from \"all-sub-projects\" scanning as different Monitor objects\n // multi result will become default, so start migrating code to always work with it\n let perProjectResult: MultiProjectResultCustom;\n\n if (!pluginApi.isMultiResult(inspectResult)) {\n perProjectResult = convertSingleResultToMultiCustom(inspectResult);\n } else {\n perProjectResult = convertMultiResultToMultiCustom(inspectResult);\n }\n\n const failedResults = (inspectResult as MultiProjectResultCustom)\n .failedResults;\n if (failedResults?.length) {\n failedResults.forEach((result) => {\n results.push({\n ok: false,\n data: new MonitorError(500, result.errMessage),\n path: result.targetFile || '',\n });\n });\n }\n\n const postingMonitorSpinnerLabel =\n 'Posting monitor snapshot for ' + displayPath + ' ...';\n await spinner(postingMonitorSpinnerLabel);\n\n // Post the project dependencies to the Registry\n for (const projectDeps of perProjectResult.scannedProjects) {\n try {\n if (!projectDeps.depGraph && !projectDeps.depTree) {\n debug(\n 'scannedProject is missing depGraph or depTree, cannot run test/monitor',\n );\n throw new FailedToRunTestError(\n 'Your monitor request could not be completed. Please email support@snyk.io',\n );\n }\n const extractedPackageManager = extractPackageManager(\n projectDeps,\n perProjectResult,\n options as MonitorOptions & Options,\n );\n\n analytics.add('packageManager', extractedPackageManager);\n\n const projectName = getProjectName(projectDeps);\n if (projectDeps.depGraph) {\n debug(`Processing ${projectDeps.depGraph.rootPkg?.name}...`);\n maybePrintDepGraph(options, projectDeps.depGraph);\n }\n\n if (projectDeps.depTree) {\n debug(`Processing ${projectDeps.depTree.name}...`);\n maybePrintDepTree(options, projectDeps.depTree);\n }\n\n const tFile = projectDeps.targetFile || targetFile;\n const targetFileRelativePath =\n projectDeps.plugin.targetFile ||\n (tFile && pathUtil.join(pathUtil.resolve(path), tFile)) ||\n '';\n\n const res: MonitorResult = await promiseOrCleanup(\n snykMonitor(\n path,\n generateMonitorMeta(options, extractedPackageManager),\n projectDeps,\n options,\n projectDeps.plugin as PluginMetadata,\n targetFileRelativePath,\n contributors,\n generateProjectAttributes(options),\n generateTags(options),\n ),\n spinner.clear(postingMonitorSpinnerLabel),\n );\n\n res.path = path;\n const monOutput = formatMonitorOutput(\n extractedPackageManager,\n res,\n options,\n projectName,\n await getExtraProjectCount(path, options, inspectResult),\n );\n // push a good result\n results.push({ ok: true, data: monOutput, path, projectName });\n } catch (err) {\n // pushing this error allow this inner loop to keep scanning the projects\n // even if 1 in 100 fails\n results.push({ ok: false, data: err, path });\n }\n }\n } catch (err) {\n // push this error, the loop continues\n results.push({ ok: false, data: err, path });\n } finally {\n spinner.clearAll();\n }\n }\n // Part 2: process the output from the Registry\n if (options.json) {\n return processJsonMonitorResponse(results);\n }\n\n const output = results\n .map((res) => {\n if (res.ok) {\n return res.data;\n }\n\n const errorMessage =\n res.data && res.data.userMessage\n ? chalk.bold.red(res.data.userMessage)\n : res.data\n ? res.data.message\n : 'Unknown error occurred.';\n\n return (\n chalk.bold.white('\\nMonitoring ' + res.path + '...\\n\\n') + errorMessage\n );\n })\n .join('\\n' + SEPARATOR);\n\n if (results.every((res) => res.ok)) {\n return output;\n }\n\n throw new Error(output);\n}\n\nfunction generateMonitorMeta(options, packageManager?): MonitorMeta {\n return {\n method: 'cli',\n packageManager,\n 'policy-path': options['policy-path'],\n 'project-name': options['project-name'] || config.PROJECT_NAME,\n isDocker: !!options.docker,\n prune: !!options.pruneRepeatedSubdependencies,\n 'remote-repo-url': options['remote-repo-url'],\n targetReference: options['target-reference'],\n };\n}\n\n/**\n * Parse an attribute from the CLI into the relevant enum type.\n *\n * @param attribute The project attribute (e.g. environment)\n * @param permitted Permitted options\n * @param options CLI options provided\n * @returns An array of attributes to set on the project or undefined to mean \"do not touch\".\n */\nfunction getProjectAttribute<T>(\n attribute: string,\n permitted: Record<string, T>,\n options: Options,\n): T[] | undefined {\n const permittedValues: T[] = Object.values(permitted);\n\n if (options[attribute] === undefined) {\n return undefined;\n }\n\n // Explicit flag to clear the existing values for this attribute already set on the project\n // e.g. if you specify --environment=\n // then this means you want to remove existing environment values on the project.\n if (options[attribute] === '') {\n return [];\n }\n\n // When it's specified without the =, we raise an explicit error to avoid\n // accidentally clearing the existing values.\n if (options[attribute] === true) {\n throw new ValidationError(\n `--${attribute} must contain an '=' with a comma-separated list of values. To clear all existing values, pass no values i.e. --${attribute}=`,\n );\n }\n\n const values = options[attribute].split(',');\n const extra = values.filter((value) => !permittedValues.includes(value));\n if (extra.length > 0) {\n throw new ValidationError(\n `${extra.length} invalid ${attribute}: ${extra.join(', ')}. ` +\n `Possible values are: ${permittedValues.join(', ')}`,\n );\n }\n\n return values;\n}\n\nexport function validateProjectAttributes(options): void {\n // The validation is deep within the parsing, so call the generate but throw away the return for simplicity.\n // Using this method makes it much clearer what the intent is of the caller.\n generateProjectAttributes(options);\n}\n\nexport function generateProjectAttributes(options): ProjectAttributes {\n return {\n criticality: getProjectAttribute(\n 'project-business-criticality',\n PROJECT_CRITICALITY,\n options,\n ),\n environment: getProjectAttribute(\n 'project-environment',\n PROJECT_ENVIRONMENT,\n options,\n ),\n lifecycle: getProjectAttribute(\n 'project-lifecycle',\n PROJECT_LIFECYCLE,\n options,\n ),\n };\n}\n\n/**\n * Parse CLI --tags options into an internal data structure.\n *\n * If this returns undefined, it means \"do not touch the existing tags on the project\".\n *\n * Anything else means \"replace existing tags on the project with this list\" even if empty.\n *\n * @param options CLI options\n * @returns List of parsed tags or undefined if they are to be left untouched.\n */\nexport function generateTags(options): Tag[] | undefined {\n if (options['project-tags'] === undefined && options['tags'] === undefined) {\n return undefined;\n }\n\n if (options['project-tags'] !== undefined && options['tags'] !== undefined) {\n throw new ValidationError(\n 'Only one of --tags or --project-tags may be specified, not both',\n );\n }\n\n const rawTags =\n options['tags'] === undefined ? options['project-tags'] : options['tags'];\n\n if (rawTags === '') {\n return [];\n }\n\n // When it's specified without the =, we raise an explicit error to avoid\n // accidentally clearing the existing tags;\n if (rawTags === true) {\n throw new ValidationError(\n `--project-tags must contain an '=' with a comma-separated list of pairs (also separated with an '='). To clear all existing values, pass no values i.e. --project-tags=`,\n );\n }\n\n const keyEqualsValuePairs = rawTags.split(',');\n\n const tags: Tag[] = [];\n for (const keyEqualsValue of keyEqualsValuePairs) {\n const parts = keyEqualsValue.split('=');\n if (parts.length !== 2) {\n throw new ValidationError(\n `The tag \"${keyEqualsValue}\" does not have an \"=\" separating the key and value. For example: --project-tag=KEY=VALUE`,\n );\n }\n tags.push({\n key: parts[0],\n value: parts[1],\n });\n }\n\n return tags;\n}\n\nexport function validateTags(options): void {\n // The validation is deep within the parsing, so call the generate but throw away the return for simplicity.\n // Using this method makes it much clearer what the intent is of the caller.\n generateTags(options);\n}\n\nfunction validateMonitorPath(path: string, isDocker?: boolean): void {\n const exists = fs.existsSync(path);\n if (!exists && !isDocker) {\n throw new Error('\"' + path + '\" is not a valid path for \"snyk monitor\"');\n }\n}\n\nfunction getProjectName(projectDeps): string {\n return (\n projectDeps.meta?.gradleProjectName ||\n projectDeps.depGraph?.rootPkg?.name ||\n projectDeps.depTree?.name\n );\n}\n","import { GoodResult, BadResult } from './types';\n\nexport function processJsonMonitorResponse(\n results: Array<GoodResult | BadResult>,\n): string {\n let dataToSend = results.map((result) => {\n if (result.ok) {\n const jsonData = JSON.parse(result.data);\n if (result.projectName) {\n jsonData.projectName = result.projectName;\n }\n return jsonData;\n }\n return { ok: false, error: result.data.message, path: result.path };\n });\n // backwards compat - strip array if only one result\n dataToSend = dataToSend.length === 1 ? dataToSend[0] : dataToSend;\n const stringifiedData = JSON.stringify(dataToSend, null, 2);\n\n if (results.every((res) => res.ok)) {\n return stringifiedData;\n }\n const err = new Error(stringifiedData) as any;\n err.json = stringifiedData;\n throw err;\n}\n","import { Options } from '../../lib/types';\n\nexport function processCommandArgs<CommandOptions>(\n ...args\n): { paths: string[]; options: Options & CommandOptions } {\n let options = ({} as any) as Options & CommandOptions;\n\n if (typeof args[args.length - 1] === 'object') {\n options = (args.pop() as any) as Options & CommandOptions;\n }\n args = args.filter(Boolean);\n\n // For repository scanning, populate with default path (cwd) if no path given\n if (args.length === 0 && !options.docker) {\n args.unshift(process.cwd());\n }\n\n return { options, paths: args };\n}\n","export type MethodResult = CommandResult | string | void;\n\nexport class CommandResult {\n result: string;\n constructor(result: string) {\n this.result = result;\n }\n\n public toString(): string {\n return this.result;\n }\n\n public getDisplayResults() {\n return this.result;\n }\n}\n\nexport abstract class TestCommandResult extends CommandResult {\n protected jsonResult = '';\n protected sarifResult = '';\n\n public getJsonResult(): string {\n return this.jsonResult;\n }\n\n public getSarifResult(): string {\n return this.sarifResult;\n }\n\n public static createHumanReadableTestCommandResult(\n humanReadableResult: string,\n jsonResult: string,\n sarifResult?: string,\n ): HumanReadableTestCommandResult {\n return new HumanReadableTestCommandResult(\n humanReadableResult,\n jsonResult,\n sarifResult,\n );\n }\n\n public static createJsonTestCommandResult(\n stdout: string,\n jsonResult?: string,\n sarifResult?: string,\n ): JsonTestCommandResult {\n return new JsonTestCommandResult(stdout, jsonResult, sarifResult);\n }\n}\n\nclass HumanReadableTestCommandResult extends TestCommandResult {\n protected jsonResult = '';\n protected sarifResult = '';\n\n constructor(\n humanReadableResult: string,\n jsonResult: string,\n sarifResult?: string,\n ) {\n super(humanReadableResult);\n this.jsonResult = jsonResult;\n if (sarifResult) {\n this.sarifResult = sarifResult;\n }\n }\n\n public getJsonResult(): string {\n return this.jsonResult;\n }\n\n public getSarifResult(): string {\n return this.sarifResult;\n }\n}\n\nclass JsonTestCommandResult extends TestCommandResult {\n constructor(stdout: string, jsonResult?: string, sarifResult?: string) {\n super(stdout);\n if (jsonResult) {\n this.jsonResult = jsonResult;\n }\n if (sarifResult) {\n this.sarifResult = sarifResult;\n } else {\n this.jsonResult = stdout;\n }\n }\n\n public getJsonResult(): string {\n return this.jsonResult;\n }\n\n public getSarifResult(): string {\n return this.sarifResult;\n }\n}\n\nexport interface IgnoreMetadata {\n reason: string;\n expires: Date;\n created: Date;\n}\n\nexport interface IgnoreRulePathData {\n [path: string]: IgnoreMetadata;\n}\n\nexport interface IgnoreRules {\n [issueId: string]: IgnoreRulePathData[];\n}\n","import config from './config';\nimport { config as userConfig } from './user-config';\n\nexport function getCodeClientProxyUrl() {\n const url = new URL(config.API);\n const domain = url.origin;\n return (\n config.CODE_CLIENT_PROXY_URL ||\n domain.replace(/\\/\\/(app\\.)?/, '//deeproxy.')\n );\n}\n\nexport function getBase64Encoding(\n enabled = userConfig.get('use-base64-encoding'),\n): boolean {\n if (enabled) {\n return enabled.toLowerCase() === 'true';\n }\n return false;\n}\n","// Separator used while displaying various paths (e.g. package paths, call\n// paths) to the user\nexport const PATH_SEPARATOR = ' > ';\n\n// String used to signify hidden path elements e.g. for abbreviated paths\nexport const PATH_HIDDEN_ELEMENTS = '...';\n\n// Number of function names to show in the beginning of an abbreviated call path\nexport const CALL_PATH_LEADING_ELEMENTS = 2;\n\n// Number of function names to show in the end of an abbreviated call path\nexport const CALL_PATH_TRAILING_ELEMENTS = 2;\n","import { Ecosystem } from './types';\n\nexport function isUnmanagedEcosystem(ecosystem: Ecosystem): boolean {\n return ecosystem === 'cpp';\n}\n","import { Options } from '../types';\nimport { Ecosystem } from './types';\n\nexport { testEcosystem } from './test';\nexport { monitorEcosystem } from './monitor';\nexport { getPlugin } from './plugins';\n\n/**\n * Ecosystems are listed here if you opt in to the new plugin test flow.\n * This is a breaking change to the old plugin formats, so only a select few\n * plugins currently work with it.\n *\n * Currently container scanning is not yet ready to work with this flow,\n * hence this is in a separate function from getEcosystem().\n */\nexport function getEcosystemForTest(options: Options): Ecosystem | null {\n if (options.unmanaged) {\n return 'cpp';\n }\n if (options.code) {\n return 'code';\n }\n return null;\n}\n\nexport function getEcosystem(options: Options): Ecosystem | null {\n if (options.unmanaged) {\n return 'cpp';\n }\n\n if (options.docker) {\n return 'docker';\n }\n return null;\n}\n","import { InspectResult } from '@snyk/cli-interface/legacy/plugin';\nimport chalk from 'chalk';\nimport config from '../config';\nimport { isCI } from '../is-ci';\nimport { makeRequest } from '../request/promise';\nimport { Contributor, MonitorResult, Options, PolicyOptions } from '../types';\nimport { spinner } from '../../lib/spinner';\nimport { getPlugin } from './plugins';\nimport { BadResult, GoodResult } from '../../cli/commands/monitor/types';\nimport { formatErrorMonitorOutput, formatMonitorOutput } from '../formatters';\nimport { getExtraProjectCount } from '../plugins/get-extra-project-count';\nimport {\n AuthFailedError,\n DockerImageNotFoundError,\n MonitorError,\n} from '../errors';\nimport {\n Ecosystem,\n ScanResult,\n EcosystemMonitorResult,\n EcosystemMonitorError,\n MonitorDependenciesRequest,\n MonitorDependenciesResponse,\n} from './types';\nimport { findAndLoadPolicyForScanResult } from './policy';\nimport { getAuthHeader } from '../api-token';\nimport { resolveAndMonitorFacts } from './resolve-monitor-facts';\nimport {\n generateProjectAttributes,\n generateTags,\n validateProjectAttributes,\n validateTags,\n} from '../../cli/commands/monitor';\nimport { isUnmanagedEcosystem } from './common';\nimport { findAndLoadPolicy } from '../policy';\n\nconst SEPARATOR = '\\n-------------------------------------------------------\\n';\n\nexport async function monitorEcosystem(\n ecosystem: Ecosystem,\n paths: string[],\n options: Options & PolicyOptions,\n contributors?: Contributor[],\n): Promise<[EcosystemMonitorResult[], EcosystemMonitorError[]]> {\n const plugin = getPlugin(ecosystem);\n\n validateTags(options);\n validateProjectAttributes(options);\n\n const scanResultsByPath: { [dir: string]: ScanResult[] } = {};\n for (const path of paths) {\n try {\n await spinner(`Analyzing dependencies in ${path}`);\n options.path = path;\n const pluginResponse = await plugin.scan(options);\n scanResultsByPath[path] = pluginResponse.scanResults;\n\n const policy = await findAndLoadPolicy(path, 'cpp', options);\n if (policy) {\n scanResultsByPath[path].forEach(\n (scanResult) => (scanResult.policy = policy.toString()),\n );\n }\n } catch (error) {\n if (\n ecosystem === 'docker' &&\n error.statusCode === 401 &&\n error.message === 'authentication required'\n ) {\n throw new DockerImageNotFoundError(path);\n }\n if (ecosystem === 'docker' && error.message === 'invalid image format') {\n throw new DockerImageNotFoundError(path);\n }\n\n throw error;\n } finally {\n spinner.clearAll();\n }\n }\n const [monitorResults, errors] = await selectAndExecuteMonitorStrategy(\n ecosystem,\n scanResultsByPath,\n options,\n contributors,\n );\n return [monitorResults, errors];\n}\n\nasync function selectAndExecuteMonitorStrategy(\n ecosystem: Ecosystem,\n scanResultsByPath: { [dir: string]: ScanResult[] },\n options: Options,\n contributors?: Contributor[],\n): Promise<[EcosystemMonitorResult[], EcosystemMonitorError[]]> {\n return isUnmanagedEcosystem(ecosystem)\n ? await resolveAndMonitorFacts(scanResultsByPath, options, contributors)\n : await monitorDependencies(scanResultsByPath, options);\n}\n\nexport async function generateMonitorDependenciesRequest(\n scanResult: ScanResult,\n options: Options,\n): Promise<MonitorDependenciesRequest> {\n // WARNING! This mutates the payload. The project name logic should be handled in the plugin.\n scanResult.name =\n options['project-name'] || config.PROJECT_NAME || scanResult.name;\n // WARNING! This mutates the payload. Policy logic should be in the plugin.\n const policy = await findAndLoadPolicyForScanResult(scanResult, options);\n if (policy !== undefined) {\n scanResult.policy = policy.toString();\n }\n\n return {\n scanResult,\n method: 'cli',\n projectName: options['project-name'] || config.PROJECT_NAME || undefined,\n tags: generateTags(options),\n attributes: generateProjectAttributes(options),\n };\n}\n\nasync function monitorDependencies(\n scans: {\n [dir: string]: ScanResult[];\n },\n options: Options,\n): Promise<[EcosystemMonitorResult[], EcosystemMonitorError[]]> {\n const results: EcosystemMonitorResult[] = [];\n const errors: EcosystemMonitorError[] = [];\n for (const [path, scanResults] of Object.entries(scans)) {\n await spinner(`Monitoring dependencies in ${path}`);\n for (const scanResult of scanResults) {\n const monitorDependenciesRequest = await generateMonitorDependenciesRequest(\n scanResult,\n options,\n );\n\n const configOrg = config.org ? decodeURIComponent(config.org) : undefined;\n\n const payload = {\n method: 'PUT',\n url: `${config.API}/monitor-dependencies`,\n json: true,\n headers: {\n 'x-is-ci': isCI(),\n authorization: getAuthHeader(),\n },\n body: monitorDependenciesRequest,\n qs: {\n org: options.org || configOrg,\n },\n };\n try {\n const response = await makeRequest<MonitorDependenciesResponse>(\n payload,\n );\n results.push({\n ...response,\n path,\n scanResult,\n });\n } catch (error) {\n if (error.code === 401) {\n throw AuthFailedError();\n }\n if (error.code >= 400 && error.code < 500) {\n throw new MonitorError(error.code, error.message);\n }\n errors.push({\n error: 'Could not monitor dependencies in ' + path,\n path,\n scanResult,\n });\n }\n }\n spinner.clearAll();\n }\n return [results, errors];\n}\n\nexport async function getFormattedMonitorOutput(\n results: Array<GoodResult | BadResult>,\n monitorResults: EcosystemMonitorResult[],\n errors: EcosystemMonitorError[],\n options: Options,\n): Promise<string> {\n for (const monitorResult of monitorResults) {\n let monOutput = '';\n if (monitorResult.ok) {\n monOutput = formatMonitorOutput(\n monitorResult.scanResult.identity.type,\n monitorResult as MonitorResult,\n options,\n monitorResult.projectName,\n await getExtraProjectCount(\n monitorResult.path,\n options,\n // TODO: Fix to pass the old \"inspectResult.plugin.meta.allSubProjectNames\", which ecosystem uses this?\n // \"allSubProjectNames\" can become a Fact returned by a plugin.\n {} as InspectResult,\n ),\n );\n } else {\n monOutput = formatErrorMonitorOutput(\n monitorResult.scanResult.identity.type,\n monitorResult as MonitorResult,\n options,\n );\n }\n results.push({\n ok: true,\n data: monOutput,\n path: monitorResult.path,\n projectName: monitorResult.id,\n });\n }\n for (const monitorError of errors) {\n results.push({\n ok: false,\n data: new MonitorError(500, monitorError.error),\n path: monitorError.path,\n });\n }\n\n const outputString = results\n .map((res) => {\n if (res.ok) {\n return res.data;\n }\n\n const errorMessage =\n res.data && res.data.userMessage\n ? chalk.bold.red(res.data.userMessage)\n : res.data\n ? res.data.message\n : 'Unknown error occurred.';\n\n return (\n chalk.bold.white('\\nMonitoring ' + res.path + '...\\n\\n') + errorMessage\n );\n })\n .join('\\n' + SEPARATOR);\n\n if (results.every((res) => res.ok)) {\n return outputString;\n }\n\n throw new Error(outputString);\n}\n","import { Analytics } from './types';\nimport * as analytics from '../../lib/analytics';\n\nexport function extractAndApplyPluginAnalytics(\n pluginAnalytics: Analytics[],\n asyncRequestToken?: string,\n): void {\n if (asyncRequestToken) {\n analytics.add('asyncRequestToken', asyncRequestToken);\n }\n for (const { name, data } of pluginAnalytics) {\n analytics.add(name, data);\n }\n}\n","import * as cppPlugin from 'snyk-cpp-plugin';\nimport * as dockerPlugin from 'snyk-docker-plugin';\nimport { codePlugin } from '../plugins/sast';\nimport { Ecosystem, EcosystemPlugin } from './types';\n\nconst EcosystemPlugins: {\n readonly [ecosystem in Ecosystem]: EcosystemPlugin;\n} = {\n cpp: cppPlugin as EcosystemPlugin,\n // TODO: not any\n docker: dockerPlugin as any,\n code: codePlugin,\n};\n\nexport function getPlugin(ecosystem: Ecosystem): EcosystemPlugin {\n return EcosystemPlugins[ecosystem];\n}\n","import * as path from 'path';\n\nimport { SupportedPackageManagers } from '../package-managers';\nimport { findAndLoadPolicy } from '../policy';\nimport { Options, PolicyOptions } from '../types';\nimport { Issue, IssuesData, ScanResult } from './types';\nimport { Policy } from '../policy/find-and-load-policy';\n\nexport async function findAndLoadPolicyForScanResult(\n scanResult: ScanResult,\n options: Options & PolicyOptions,\n): Promise<object | undefined> {\n const targetFileRelativePath = scanResult.identity.targetFile\n ? path.join(path.resolve(`${options.path}`), scanResult.identity.targetFile)\n : undefined;\n const targetFileDir = targetFileRelativePath\n ? path.parse(targetFileRelativePath).dir\n : undefined;\n const scanType = options.docker\n ? 'docker'\n : (scanResult.identity.type as SupportedPackageManagers);\n // TODO: fix this and send only send when we used resolve-deps for node\n // it should be a ExpandedPkgTree type instead\n const packageExpanded = undefined;\n\n const policy = (await findAndLoadPolicy(\n options.path,\n scanType,\n options,\n packageExpanded,\n targetFileDir,\n )) as object | undefined; // TODO: findAndLoadPolicy() does not return a string!\n return policy;\n}\n\nexport function filterIgnoredIssues(\n issues: Issue[],\n issuesData: IssuesData,\n policy?: Policy,\n): [Issue[], IssuesData] {\n if (!policy?.ignore) {\n return [issues, issuesData];\n }\n\n const filteredIssuesData: IssuesData = { ...issuesData };\n const filteredIssues: Issue[] = issues.filter((issue) => {\n const ignoredIssue = policy.ignore[issue.issueId];\n if (!ignoredIssue) {\n return true;\n }\n\n const allResourcesRule = ignoredIssue.find((element) => '*' in element);\n if (!allResourcesRule) {\n return true;\n }\n\n const expiredIgnoreRule =\n new Date(allResourcesRule['*'].expires) < new Date();\n if (!expiredIgnoreRule) {\n delete filteredIssuesData[issue.issueId];\n return false;\n }\n\n return true;\n });\n\n return [filteredIssues, filteredIssuesData];\n}\n","import { Contributor, Options } from '../types';\nimport { spinner } from '../../lib/spinner';\nimport {\n ScanResult,\n EcosystemMonitorError,\n EcosystemMonitorResult,\n} from './types';\nimport {\n requestMonitorPollingToken,\n pollingMonitorWithTokenUntilDone,\n} from '../polling/polling-monitor';\nimport { extractAndApplyPluginAnalytics } from './plugin-analytics';\nimport { AuthFailedError, MonitorError } from '../errors';\nimport { extractResolutionMetaFromScanResult } from '../polling/common';\n\nexport async function resolveAndMonitorFacts(\n scans: {\n [dir: string]: ScanResult[];\n },\n options: Options,\n contributors?: Contributor[],\n): Promise<[EcosystemMonitorResult[], EcosystemMonitorError[]]> {\n const results: EcosystemMonitorResult[] = [];\n const errors: EcosystemMonitorError[] = [];\n\n for (const [path, scanResults] of Object.entries(scans)) {\n await spinner(`Resolving and Monitoring fileSignatures in ${path}`);\n for (const scanResult of scanResults) {\n try {\n const res = await requestMonitorPollingToken(options, true, scanResult);\n if (scanResult.analytics) {\n extractAndApplyPluginAnalytics(scanResult.analytics, res.token);\n }\n const resolutionMeta = extractResolutionMetaFromScanResult(scanResult);\n const { maxAttempts, pollInterval } = res.pollingTask;\n const attemptsCount = 0;\n const response = await pollingMonitorWithTokenUntilDone(\n res.token,\n true,\n options,\n pollInterval,\n attemptsCount,\n maxAttempts,\n resolutionMeta,\n contributors,\n );\n\n const ecosystemMonitorResult: EcosystemMonitorResult = {\n ...response,\n path,\n scanResult,\n };\n\n results.push(ecosystemMonitorResult);\n } catch (error) {\n if (error.code === 401) {\n throw AuthFailedError();\n }\n\n if (error.code >= 400 && error.code < 500) {\n throw new MonitorError(error.code, error.message);\n }\n errors.push({\n error: 'Could not monitor dependencies in ' + path,\n path,\n scanResult,\n });\n }\n }\n spinner.clearAll();\n }\n\n return [results, errors];\n}\n","import { Options, PolicyOptions } from '../types';\nimport { spinner } from '../../lib/spinner';\nimport { Ecosystem, ScanResult, TestResult } from './types';\nimport {\n requestTestPollingToken,\n pollingTestWithTokenUntilDone,\n} from '../polling/polling-test';\nimport { extractAndApplyPluginAnalytics } from './plugin-analytics';\nimport { findAndLoadPolicy } from '../policy';\nimport { filterIgnoredIssues } from './policy';\n\nexport async function resolveAndTestFacts(\n ecosystem: Ecosystem,\n scans: {\n [dir: string]: ScanResult[];\n },\n options: Options & PolicyOptions,\n): Promise<[TestResult[], string[]]> {\n const results: any[] = [];\n const errors: string[] = [];\n\n for (const [path, scanResults] of Object.entries(scans)) {\n await spinner(`Resolving and Testing fileSignatures in ${path}`);\n for (const scanResult of scanResults) {\n try {\n const res = await requestTestPollingToken(options, true, scanResult);\n if (scanResult.analytics) {\n extractAndApplyPluginAnalytics(scanResult.analytics, res.token);\n }\n const { maxAttempts, pollInterval } = res.pollingTask;\n const attemptsCount = 0;\n const response = await pollingTestWithTokenUntilDone(\n res.token,\n ecosystem,\n options,\n pollInterval,\n attemptsCount,\n maxAttempts,\n );\n\n const policy = await findAndLoadPolicy(path, 'cpp', options);\n const [issues, issuesData] = filterIgnoredIssues(\n response.issues,\n response.issuesData,\n policy,\n );\n\n results.push({\n issues,\n issuesData,\n depGraphData: response?.depGraphData,\n depsFilePaths: response?.depsFilePaths,\n fileSignaturesDetails: response?.fileSignaturesDetails,\n });\n } catch (error) {\n const hasStatusCodeError = error.code >= 400 && error.code <= 500;\n if (hasStatusCodeError) {\n errors.push(error.message);\n continue;\n }\n const failedPath = path ? `in ${path}` : '.';\n errors.push(`Could not test dependencies ${failedPath}`);\n }\n }\n }\n spinner.clearAll();\n return [results, errors];\n}\n","import config from '../config';\nimport { isCI } from '../is-ci';\nimport { makeRequest } from '../request/promise';\nimport { Options, PolicyOptions } from '../types';\nimport { TestCommandResult } from '../../cli/commands/types';\nimport { spinner } from '../../lib/spinner';\nimport { Ecosystem, ScanResult, TestResult } from './types';\nimport { getPlugin } from './plugins';\nimport { TestDependenciesResponse } from '../snyk-test/legacy';\nimport { assembleQueryString } from '../snyk-test/common';\nimport { getAuthHeader } from '../api-token';\nimport { resolveAndTestFacts } from './resolve-test-facts';\nimport { isUnmanagedEcosystem } from './common';\n\nexport async function testEcosystem(\n ecosystem: Ecosystem,\n paths: string[],\n options: Options & PolicyOptions,\n): Promise<TestCommandResult> {\n const plugin = getPlugin(ecosystem);\n // TODO: this is an intermediate step before consolidating ecosystem plugins\n // to accept flows that act differently in the testDependencies step\n if (plugin.test) {\n const { readableResult: res, sarifResult: sarifRes } = await plugin.test(\n paths,\n options,\n );\n return TestCommandResult.createHumanReadableTestCommandResult(\n res,\n '',\n sarifRes,\n );\n }\n const scanResultsByPath: { [dir: string]: ScanResult[] } = {};\n for (const path of paths) {\n await spinner(`Scanning dependencies in ${path}`);\n options.path = path;\n const pluginResponse = await plugin.scan(options);\n scanResultsByPath[path] = pluginResponse.scanResults;\n }\n spinner.clearAll();\n\n const [testResults, errors] = await selectAndExecuteTestStrategy(\n ecosystem,\n scanResultsByPath,\n options,\n );\n\n const stringifiedData = JSON.stringify(testResults, null, 2);\n if (options.json) {\n return TestCommandResult.createJsonTestCommandResult(stringifiedData);\n }\n const emptyResults: ScanResult[] = [];\n const scanResults = emptyResults.concat(...Object.values(scanResultsByPath));\n\n const readableResult = await plugin.display(\n scanResults,\n testResults,\n errors,\n options,\n );\n\n return TestCommandResult.createHumanReadableTestCommandResult(\n readableResult,\n stringifiedData,\n );\n}\n\nexport async function selectAndExecuteTestStrategy(\n ecosystem: Ecosystem,\n scanResultsByPath: { [dir: string]: ScanResult[] },\n options: Options & PolicyOptions,\n): Promise<[TestResult[], string[]]> {\n return isUnmanagedEcosystem(ecosystem)\n ? await resolveAndTestFacts(ecosystem, scanResultsByPath, options)\n : await testDependencies(scanResultsByPath, options);\n}\n\nasync function testDependencies(\n scans: {\n [dir: string]: ScanResult[];\n },\n options: Options,\n): Promise<[TestResult[], string[]]> {\n const results: TestResult[] = [];\n const errors: string[] = [];\n for (const [path, scanResults] of Object.entries(scans)) {\n await spinner(`Testing dependencies in ${path}`);\n for (const scanResult of scanResults) {\n const payload = {\n method: 'POST',\n url: `${config.API}/test-dependencies`,\n json: true,\n headers: {\n 'x-is-ci': isCI(),\n authorization: getAuthHeader(),\n },\n body: {\n scanResult,\n },\n qs: assembleQueryString(options),\n };\n try {\n const response = await makeRequest<TestDependenciesResponse>(payload);\n results.push({\n issues: response.result.issues,\n issuesData: response.result.issuesData,\n depGraphData: response.result.depGraphData,\n });\n } catch (error) {\n if (error.code >= 400 && error.code < 500) {\n throw new Error(error.message);\n }\n errors.push('Could not test dependencies in ' + path);\n }\n }\n }\n spinner.clearAll();\n return [results, errors];\n}\n","export function abridgeErrorMessage(\n msg: string,\n maxLen: number,\n ellipsis = ' ... ',\n): string {\n if (msg.length <= maxLen) {\n return msg;\n }\n const toKeep = Math.floor((maxLen - ellipsis.length) / 2);\n return (\n msg.slice(0, toKeep) + ellipsis + msg.slice(msg.length - toKeep, msg.length)\n );\n}\n","import { CustomError } from './custom-error';\n\nexport class InvalidRemoteUrlError extends CustomError {\n private static ERROR_MESSAGE =\n 'Invalid argument provided for --remote-repo-url. Value must be a string.';\n\n constructor() {\n super(InvalidRemoteUrlError.ERROR_MESSAGE);\n }\n}\n","import { makeRequest } from '../request';\nimport { getAuthHeader } from '../api-token';\nimport config from '../config';\nimport { assembleQueryString } from '../snyk-test/common';\nimport { OrgFeatureFlagResponse } from './types';\nimport { Options } from '../types';\nimport { AuthFailedError } from '../errors';\n\nexport async function isFeatureFlagSupportedForOrg(\n featureFlag: string,\n org,\n): Promise<OrgFeatureFlagResponse> {\n const response = await makeRequest({\n method: 'GET',\n headers: {\n Authorization: getAuthHeader(),\n },\n qs: assembleQueryString({ org }),\n url: `${config.API}/cli-config/feature-flags/${featureFlag}`,\n gzip: true,\n json: true,\n });\n\n return (response as any).body;\n}\n\nexport async function hasFeatureFlag(\n featureFlag: string,\n options: Options,\n): Promise<boolean | undefined> {\n const { code, error, ok } = await isFeatureFlagSupportedForOrg(\n featureFlag,\n options.org,\n );\n\n if (code === 401 || code === 403) {\n throw AuthFailedError(error, code);\n }\n return ok;\n}\n","import * as fs from 'fs';\nimport * as pathLib from 'path';\nconst sortBy = require('lodash.sortby');\nconst groupBy = require('lodash.groupby');\nimport { detectPackageManagerFromFile } from './detect';\nimport * as debugModule from 'debug';\nconst debug = debugModule('snyk:find-files');\n\n// TODO: use util.promisify once we move to node 8\n\n/**\n * Returns files inside given file path.\n *\n * @param path file path.\n */\nexport async function readDirectory(path: string): Promise<string[]> {\n return await new Promise((resolve, reject) => {\n fs.readdir(path, (err, files) => {\n if (err) {\n reject(err);\n }\n resolve(files);\n });\n });\n}\n\n/**\n * Returns file stats object for given file path.\n *\n * @param path path to file or directory.\n */\nexport async function getStats(path: string): Promise<fs.Stats> {\n return await new Promise((resolve, reject) => {\n fs.stat(path, (err, stats) => {\n if (err) {\n reject(err);\n }\n resolve(stats);\n });\n });\n}\n\ninterface FindFilesRes {\n files: string[];\n allFilesFound: string[];\n}\n\n/**\n * Find all files in given search path. Returns paths to files found.\n *\n * @param path file path to search.\n * @param ignore (optional) files to ignore. Will always ignore node_modules.\n * @param filter (optional) file names to find. If not provided all files are returned.\n * @param levelsDeep (optional) how many levels deep to search, defaults to two, this path and one sub directory.\n */\nexport async function find(\n path: string,\n ignore: string[] = [],\n filter: string[] = [],\n levelsDeep = 4,\n): Promise<FindFilesRes> {\n const found: string[] = [];\n const foundAll: string[] = [];\n\n // ensure we ignore find against node_modules path.\n if (path.endsWith('node_modules')) {\n return { files: found, allFilesFound: foundAll };\n }\n // ensure node_modules is always ignored\n if (!ignore.includes('node_modules')) {\n ignore.push('node_modules');\n }\n try {\n if (levelsDeep < 0) {\n return { files: found, allFilesFound: foundAll };\n } else {\n levelsDeep--;\n }\n const fileStats = await getStats(path);\n if (fileStats.isDirectory()) {\n const { files, allFilesFound } = await findInDirectory(\n path,\n ignore,\n filter,\n levelsDeep,\n );\n found.push(...files);\n foundAll.push(...allFilesFound);\n } else if (fileStats.isFile()) {\n const fileFound = findFile(path, filter);\n if (fileFound) {\n found.push(fileFound);\n foundAll.push(fileFound);\n }\n }\n const filteredOutFiles = foundAll.filter((f) => !found.includes(f));\n if (filteredOutFiles.length) {\n debug(\n `Filtered out ${filteredOutFiles.length}/${\n foundAll.length\n } files: ${filteredOutFiles.join(', ')}`,\n );\n }\n return { files: filterForDefaultManifests(found), allFilesFound: foundAll };\n } catch (err) {\n throw new Error(`Error finding files in path '${path}'.\\n${err.message}`);\n }\n}\n\nfunction findFile(path: string, filter: string[] = []): string | null {\n if (filter.length > 0) {\n const filename = pathLib.basename(path);\n if (filter.includes(filename)) {\n return path;\n }\n } else {\n return path;\n }\n return null;\n}\n\nasync function findInDirectory(\n path: string,\n ignore: string[] = [],\n filter: string[] = [],\n levelsDeep = 4,\n): Promise<FindFilesRes> {\n const files = await readDirectory(path);\n const toFind = files\n .filter((file) => !ignore.includes(file))\n .map((file) => {\n const resolvedPath = pathLib.resolve(path, file);\n if (!fs.existsSync(resolvedPath)) {\n debug('File does not seem to exist, skipping: ', file);\n return { files: [], allFilesFound: [] };\n }\n return find(resolvedPath, ignore, filter, levelsDeep);\n });\n\n const found = await Promise.all(toFind);\n return {\n files: Array.prototype.concat.apply(\n [],\n found.map((f) => f.files),\n ),\n allFilesFound: Array.prototype.concat.apply(\n [],\n found.map((f) => f.allFilesFound),\n ),\n };\n}\n\nfunction filterForDefaultManifests(files: string[]): string[] {\n // take all the files in the same dir & filter out\n // based on package Manager\n if (files.length <= 1) {\n return files;\n }\n\n const filteredFiles: string[] = [];\n\n const beforeSort = files\n .filter(Boolean)\n .filter((p) => fs.existsSync(p))\n .map((p) => ({\n path: p,\n ...pathLib.parse(p),\n packageManager: detectProjectTypeFromFile(p),\n }));\n const sorted = sortBy(beforeSort, 'dir');\n const foundFiles = groupBy(sorted, 'dir');\n\n for (const directory of Object.keys(foundFiles)) {\n const filesInDirectory = foundFiles[directory];\n const beforeGroup = filesInDirectory.filter((p) => !!p.packageManager);\n\n const groupedFiles = groupBy(beforeGroup, 'packageManager');\n\n for (const packageManager of Object.keys(groupedFiles)) {\n const filesPerPackageManager = groupedFiles[packageManager];\n\n if (filesPerPackageManager.length <= 1) {\n const shouldSkip = shouldSkipAddingFile(\n packageManager,\n filesPerPackageManager[0].path,\n filteredFiles,\n );\n if (shouldSkip) {\n continue;\n }\n filteredFiles.push(filesPerPackageManager[0].path);\n continue;\n }\n const defaultManifestFileName = chooseBestManifest(\n filesPerPackageManager,\n packageManager,\n );\n if (defaultManifestFileName) {\n const shouldSkip = shouldSkipAddingFile(\n packageManager,\n filesPerPackageManager[0].path,\n filteredFiles,\n );\n if (shouldSkip) {\n continue;\n }\n filteredFiles.push(defaultManifestFileName);\n }\n }\n }\n return filteredFiles;\n}\n\nfunction detectProjectTypeFromFile(file: string): string | null {\n try {\n const packageManager = detectPackageManagerFromFile(file);\n if (['yarn', 'npm'].includes(packageManager)) {\n return 'node';\n }\n return packageManager;\n } catch (error) {\n return null;\n }\n}\n\nfunction shouldSkipAddingFile(\n packageManager: string,\n filePath: string,\n filteredFiles: string[],\n): boolean {\n if (['gradle'].includes(packageManager) && filePath) {\n const rootGradleFile = filteredFiles\n .filter(\n (targetFile) =>\n targetFile.endsWith('build.gradle') ||\n targetFile.endsWith('build.gradle.kts'),\n )\n .filter((targetFile) => {\n const parsedPath = pathLib.parse(targetFile);\n const relativePath = pathLib.relative(parsedPath.dir, filePath);\n return !relativePath.startsWith(`..${pathLib.sep}`);\n });\n return !!rootGradleFile.length;\n }\n return false;\n}\n\nfunction chooseBestManifest(\n files: Array<{ base: string; path: string }>,\n projectType: string,\n): string | null {\n switch (projectType) {\n case 'node': {\n const lockFile = files.filter((path) =>\n ['package-lock.json', 'yarn.lock'].includes(path.base),\n )[0];\n debug(\n `Encountered multiple node lockfiles files, defaulting to ${lockFile.path}`,\n );\n if (lockFile) {\n return lockFile.path;\n }\n const packageJson = files.filter((path) =>\n ['package.json'].includes(path.base),\n )[0];\n debug(\n `Encountered multiple npm manifest files, defaulting to ${packageJson.path}`,\n );\n return packageJson.path;\n }\n case 'rubygems': {\n const defaultManifest = files.filter((path) =>\n ['Gemfile.lock'].includes(path.base),\n )[0];\n debug(\n `Encountered multiple gem manifest files, defaulting to ${defaultManifest.path}`,\n );\n return defaultManifest.path;\n }\n case 'cocoapods': {\n const defaultManifest = files.filter((path) =>\n ['Podfile'].includes(path.base),\n )[0];\n debug(\n `Encountered multiple cocoapods manifest files, defaulting to ${defaultManifest.path}`,\n );\n return defaultManifest.path;\n }\n case 'pip': {\n const defaultManifest = files.filter((path) =>\n ['Pipfile'].includes(path.base),\n )[0];\n debug(\n `Encountered multiple pip manifest files, defaulting to ${defaultManifest.path}`,\n );\n return defaultManifest.path;\n }\n case 'gradle': {\n const defaultManifest = files.filter((path) =>\n ['build.gradle'].includes(path.base),\n )[0];\n debug(\n `Encountered multiple gradle manifest files, defaulting to ${defaultManifest.path}`,\n );\n return defaultManifest.path;\n }\n case 'poetry': {\n const defaultManifest = files.filter((path) =>\n ['pyproject.toml'].includes(path.base),\n )[0];\n debug(\n `Encountered multiple poetry manifest files, defaulting to ${defaultManifest.path}`,\n );\n return defaultManifest.path;\n }\n case 'hex': {\n const defaultManifest = files.filter((path) =>\n ['mix.exs'].includes(path.base),\n )[0];\n debug(\n `Encountered multiple hex manifest files, defaulting to ${defaultManifest.path}`,\n );\n return defaultManifest.path;\n }\n default: {\n return null;\n }\n }\n}\n","import chalk from 'chalk';\nimport {\n TestResult,\n BaseImageRemediationAdvice,\n} from '../../../lib/snyk-test/legacy';\n\nexport function dockerRemediationForDisplay(res: TestResult) {\n if (!res.docker || !res.docker.baseImageRemediation) {\n return '';\n }\n const { advice, message } = res.docker.baseImageRemediation;\n const out = [] as any[];\n\n if (advice) {\n for (const item of advice) {\n out.push(getTerminalStringFormatter(item)(item.message));\n }\n } else if (message) {\n out.push(message);\n } else {\n return '';\n }\n return `\\n\\n${out.join('\\n')}`;\n}\n\nfunction getTerminalStringFormatter({\n color,\n bold,\n}: BaseImageRemediationAdvice) {\n let formatter = chalk;\n if (color && formatter[color]) {\n formatter = formatter[color];\n }\n if (bold) {\n formatter = formatter.bold;\n }\n return formatter;\n}\n","const values = require('lodash.values');\nimport chalk from 'chalk';\n\nexport function createDockerBinaryHeading(pkgInfo): string {\n const binaryName = pkgInfo.pkg.name;\n const binaryVersion = pkgInfo.pkg.version;\n const numOfVulns = values(pkgInfo.issues).length;\n const vulnCountText = numOfVulns > 1 ? 'vulnerabilities' : 'vulnerability';\n return numOfVulns\n ? chalk.bold.white(\n `------------ Detected ${numOfVulns} ${vulnCountText}` +\n ` for ${binaryName}@${binaryVersion} ------------`,\n '\\n',\n )\n : '';\n}\n","const values = require('lodash.values');\nimport { createDockerBinaryHeading } from './format-docker-binary-heading';\nimport { Options, TestOptions } from '../../../lib/types';\nimport { formatIssues } from '../legacy-format-issue';\n\nexport function formatDockerBinariesIssues(\n dockerBinariesSortedGroupedVulns,\n binariesVulns,\n options: Options & TestOptions,\n): string[] {\n const binariesIssuesOutput = [] as string[];\n for (const pkgInfo of values(binariesVulns.affectedPkgs)) {\n binariesIssuesOutput.push(createDockerBinaryHeading(pkgInfo));\n const binaryIssues = dockerBinariesSortedGroupedVulns.filter(\n (vuln) => vuln.metadata.name === pkgInfo.pkg.name,\n );\n const formattedBinaryIssues = binaryIssues.map((vuln) =>\n formatIssues(vuln, options),\n );\n binariesIssuesOutput.push(formattedBinaryIssues.join('\\n\\n'));\n }\n return binariesIssuesOutput;\n}\n","export { dockerRemediationForDisplay } from './format-docker-advice';\nexport { formatDockerBinariesIssues } from './format-docker-binary-issues';\nexport { createDockerBinaryHeading } from './format-docker-binary-heading';\n","import { errorMessageWithRetry } from '../errors';\n\nexport function summariseErrorResults(errorResultsLength: number): string {\n const projects = errorResultsLength > 1 ? 'projects' : 'project';\n if (errorResultsLength > 0) {\n return errorMessageWithRetry(\n ` Failed to test ${errorResultsLength} ${projects}.`,\n );\n }\n\n return '';\n}\n","const assign = require('lodash.assign');\nimport chalk from 'chalk';\nimport * as url from 'url';\n\nimport { MonitorResult } from '../types';\nimport config from '../config';\nimport { showMultiScanTip } from './show-multi-scan-tip';\n\nexport function formatErrorMonitorOutput(\n packageManager,\n res: MonitorResult,\n options,\n projectName?: string,\n): string {\n const humanReadableName = projectName\n ? `${res.path} (${projectName})`\n : res.path;\n const strOutput =\n chalk.bold.white('\\nMonitoring ' + humanReadableName + '...\\n\\n') +\n '\\n\\n' +\n (packageManager === 'maven'\n ? chalk.yellow('Detected 0 dependencies (no project created)')\n : '');\n return options.json\n ? JSON.stringify(\n assign({}, res, {\n packageManager,\n }),\n )\n : strOutput;\n}\n\nexport function formatMonitorOutput(\n packageManager,\n res: MonitorResult,\n options,\n projectName?: string,\n foundProjectCount?: number,\n): string {\n const manageUrl = buildManageUrl(res.id, res.org);\n const multiScanTip = showMultiScanTip(\n packageManager,\n options,\n foundProjectCount,\n );\n const issues = res.licensesPolicy ? 'issues' : 'vulnerabilities';\n const humanReadableName = projectName\n ? `${res.path} (${projectName})`\n : res.path;\n const strOutput =\n chalk.bold.white('\\nMonitoring ' + humanReadableName + '...\\n\\n') +\n 'Explore this snapshot at ' +\n res.uri +\n '\\n\\n' +\n (multiScanTip ? `${multiScanTip}\\n\\n` : '') +\n (res.isMonitored\n ? 'Notifications about newly disclosed ' +\n issues +\n ' related ' +\n 'to these dependencies will be emailed to you.\\n'\n : chalk.bold.red(\n 'Project is inactive, so notifications are turned ' +\n 'off.\\nActivate this project here: ' +\n manageUrl +\n '\\n\\n',\n )) +\n (res.trialStarted\n ? chalk.yellow(\n \"You're over the free plan usage limit, \\n\" +\n 'and are now on a free 14-day premium trial.\\n' +\n 'View plans here: ' +\n manageUrl +\n '\\n\\n',\n )\n : '');\n\n return options.json\n ? JSON.stringify(\n assign({}, res, {\n manageUrl,\n packageManager,\n }),\n )\n : strOutput;\n}\n\nfunction buildManageUrl(resId: string, org?: string): string {\n const endpoint = url.parse(config.API);\n let leader = '';\n if (org) {\n leader = '/org/' + org;\n }\n endpoint.pathname = leader + '/manage';\n const manageUrl = url.format(endpoint);\n\n // TODO: what was this meant to do?\n endpoint.pathname = leader + '/monitor/' + resId;\n return manageUrl;\n}\n","import * as wrap from 'wrap-ansi';\nimport chalk from 'chalk';\n\nimport {\n AnnotatedIssue,\n CallPath,\n REACHABILITY,\n} from '../../lib/snyk-test/legacy';\nimport { SampleReachablePaths } from './types';\nimport {\n CALL_PATH_LEADING_ELEMENTS,\n PATH_SEPARATOR,\n CALL_PATH_TRAILING_ELEMENTS,\n PATH_HIDDEN_ELEMENTS,\n} from '../constants';\n\nconst reachabilityLevels: {\n [key in REACHABILITY]: { color: Function; text: string; json: string };\n} = {\n [REACHABILITY.FUNCTION]: {\n color: chalk.redBright,\n text: 'Reachable',\n json: 'reachable',\n },\n [REACHABILITY.PACKAGE]: {\n color: chalk.yellow,\n text: 'Potentially reachable',\n json: 'potentially-reachable',\n },\n [REACHABILITY.NOT_REACHABLE]: {\n color: chalk.blueBright,\n text: 'Not reachable',\n json: 'not-reachable',\n },\n [REACHABILITY.NO_INFO]: {\n color: (str) => str,\n text: '',\n json: 'no-path-found',\n },\n};\n\nexport function formatReachability(reachability?: REACHABILITY): string {\n if (!reachability) {\n return '';\n }\n const reachableInfo = reachabilityLevels[reachability];\n const textFunc = reachableInfo ? reachableInfo.color : (str) => str;\n const text =\n reachableInfo && reachableInfo.text ? `[${reachableInfo.text}]` : '';\n\n return wrap(textFunc(text), 100);\n}\n\nexport function getReachabilityText(reachability?: REACHABILITY): string {\n if (!reachability) {\n return '';\n }\n const reachableInfo = reachabilityLevels[reachability];\n return reachableInfo ? reachableInfo.text : '';\n}\n\nexport function getReachabilityJson(reachability?: REACHABILITY): string {\n if (!reachability) {\n return '';\n }\n const reachableInfo = reachabilityLevels[reachability];\n return reachableInfo ? reachableInfo.json : '';\n}\n\nexport function summariseReachableVulns(\n vulnerabilities: AnnotatedIssue[],\n): string {\n const reachableVulnsCount = vulnerabilities.filter(\n (v) => v.reachability === REACHABILITY.FUNCTION,\n ).length;\n\n if (reachableVulnsCount > 0) {\n const vulnText =\n reachableVulnsCount === 1 ? 'vulnerability' : 'vulnerabilities';\n return `In addition, found ${reachableVulnsCount} ${vulnText} with a reachable path.`;\n }\n\n return '';\n}\n\nfunction getDistinctReachablePaths(\n reachablePaths: CallPath[],\n maxPathCount: number,\n): string[] {\n const uniquePaths = new Set<string>();\n for (const path of reachablePaths) {\n if (uniquePaths.size >= maxPathCount) {\n break;\n }\n uniquePaths.add(formatReachablePath(path));\n }\n return Array.from(uniquePaths.values());\n}\n\nexport function formatReachablePaths(\n sampleReachablePaths: SampleReachablePaths | undefined,\n maxPathCount: number,\n template: (samplePaths: string[], extraPathsCount: number) => string,\n): string {\n const paths = sampleReachablePaths?.paths || [];\n const pathCount = sampleReachablePaths?.pathCount || 0;\n const distinctPaths = getDistinctReachablePaths(paths, maxPathCount);\n const extraPaths = pathCount - distinctPaths.length;\n\n return template(distinctPaths, extraPaths);\n}\n\nexport function formatReachablePath(path: CallPath): string {\n const head = path.slice(0, CALL_PATH_LEADING_ELEMENTS).join(PATH_SEPARATOR);\n const tail = path\n .slice(path.length - CALL_PATH_TRAILING_ELEMENTS, path.length)\n .join(PATH_SEPARATOR);\n return `${head}${PATH_SEPARATOR}${PATH_HIDDEN_ELEMENTS}${PATH_SEPARATOR}${tail}`;\n}\n","import chalk from 'chalk';\nimport { rightPadWithSpaces } from '../../lib/right-pad';\nimport { TestOptions, Options } from '../../lib/types';\nimport { TestResult } from '../../lib/snyk-test/legacy';\nimport { IacTestResponse } from '../../lib/snyk-test/iac-test-result';\nimport { capitalizePackageManager } from './iac-output';\n\nexport function formatTestMeta(\n res: TestResult | IacTestResponse,\n options: Options & TestOptions,\n): string {\n const padToLength = 19; // chars to align\n const packageManager = res.packageManager || options.packageManager;\n const targetFile = res.targetFile || res.displayTargetFile || options.file;\n const openSource = res.isPrivate ? 'no' : 'yes';\n const meta = res.org\n ? [chalk.bold(rightPadWithSpaces('Organization: ', padToLength)) + res.org]\n : [];\n if (options.iac) {\n meta.push(\n chalk.bold(rightPadWithSpaces('Type: ', padToLength)) +\n capitalizePackageManager(packageManager),\n );\n } else {\n meta.push(\n chalk.bold(rightPadWithSpaces('Package manager: ', padToLength)) +\n packageManager,\n );\n }\n if (targetFile) {\n meta.push(\n chalk.bold(rightPadWithSpaces('Target file: ', padToLength)) + targetFile,\n );\n }\n if (res.projectName) {\n meta.push(\n chalk.bold(rightPadWithSpaces('Project name: ', padToLength)) +\n res.projectName,\n );\n }\n if (options.docker) {\n meta.push(\n chalk.bold(rightPadWithSpaces('Docker image: ', padToLength)) +\n options.path,\n );\n\n if (res.platform) {\n meta.push(\n chalk.bold(rightPadWithSpaces('Platform: ', padToLength)) +\n res.platform,\n );\n }\n } else {\n meta.push(\n chalk.bold(rightPadWithSpaces('Open source: ', padToLength)) + openSource,\n );\n meta.push(\n chalk.bold(rightPadWithSpaces('Project path: ', padToLength)) +\n options.path,\n );\n }\n if (res.payloadType !== 'k8sconfig') {\n const legacyRes: TestResult = res as TestResult;\n if (legacyRes.docker && legacyRes.docker.baseImage) {\n meta.push(\n chalk.bold(rightPadWithSpaces('Base image: ', padToLength)) +\n legacyRes.docker.baseImage,\n );\n }\n\n if (legacyRes.filesystemPolicy) {\n meta.push(\n chalk.bold(rightPadWithSpaces('Local Snyk policy: ', padToLength)) +\n chalk.green('found'),\n );\n if (\n legacyRes.ignoreSettings &&\n legacyRes.ignoreSettings.disregardFilesystemIgnores\n ) {\n meta.push(\n chalk.bold(\n rightPadWithSpaces('Local Snyk policy ignored: ', padToLength),\n ) + chalk.red('yes'),\n );\n }\n }\n if (legacyRes.licensesPolicy) {\n meta.push(\n chalk.bold(rightPadWithSpaces('Licenses: ', padToLength)) +\n chalk.green('enabled'),\n );\n }\n }\n\n return meta.join('\\n');\n}\n","import { Options, TestOptions } from '../../lib/types';\n\nexport function summariseVulnerableResults(\n vulnerableResults,\n options: Options & TestOptions,\n): string {\n const vulnsLength = vulnerableResults.length;\n if (vulnsLength) {\n if (options.showVulnPaths) {\n return `, ${vulnsLength} contained ${\n options.iac ? 'issues' : 'vulnerable paths'\n }.`;\n }\n return `, ${vulnsLength} had issues.`;\n }\n\n if (options.showVulnPaths) {\n return ', no vulnerable paths were found.';\n }\n\n return ', no issues were found.';\n}\n","import { SEVERITIES, SEVERITY } from '../snyk-test/common';\n\nexport function getSeverityValue(severity: SEVERITY | 'none'): number {\n return SEVERITIES.find((s) => s.verboseName === severity)!.value;\n}\n","export {\n capitalizePackageManager,\n createSarifOutputForIac,\n shareResultsOutput,\n getIacDisplayedOutput,\n getIacDisplayErrorFileOutput,\n} from './v1';\n\nexport {\n formatIacTestSummary,\n getIacDisplayedIssues,\n formatIacTestFailures,\n iacTestTitle,\n spinnerMessage,\n spinnerSuccessMessage,\n customRulesMessage,\n customRulesReportMessage,\n shouldLogUserMessages,\n formatShareResultsOutput,\n failuresTipOutput,\n} from './v2';\n","import chalk from 'chalk';\nimport { icon } from '../../../theme';\nimport * as Debug from 'debug';\nimport * as pathLib from 'path';\nimport { pathToFileURL } from 'url';\nimport * as upperFirst from 'lodash.upperfirst';\nimport * as camelCase from 'lodash.camelcase';\n\nimport {\n IacTestResponse,\n AnnotatedIacIssue,\n} from '../../../../lib/snyk-test/iac-test-result';\nimport { printPath } from '../../remediation-based-format-issues';\nimport { titleCaseText } from '../../legacy-format-issue';\nimport * as sarif from 'sarif';\nimport { colorTextBySeverity } from '../../../../lib/snyk-test/common';\nimport { IacFileInDirectory, IacOutputMeta } from '../../../../lib/types';\nimport { isLocalFolder } from '../../../../lib/detect';\nimport { getSeverityValue } from '../../get-severity-value';\nimport { getIssueLevel } from '../../sarif-output';\nimport { getVersion } from '../../../version';\nimport config from '../../../config';\nimport { getRepositoryRoot } from '../../../iac/git';\nconst debug = Debug('iac-output');\n\nfunction formatIacIssue(\n issue: AnnotatedIacIssue,\n isNew: boolean,\n path: string[],\n): string {\n const newBadge = isNew ? ' (new)' : '';\n const name = issue.subType ? ` in ${chalk.bold(issue.subType)}` : '';\n\n let introducedBy = '';\n if (path) {\n // In this mode, we show only one path by default, for compactness\n const pathStr = printPath(path, 0);\n introducedBy = `\\n introduced by ${pathStr}`;\n }\n\n return (\n colorTextBySeverity(\n issue.severity,\n ` ${icon.ISSUE} ${chalk.bold(issue.title)}${newBadge} [${titleCaseText(\n issue.severity,\n )} Severity]`,\n ) +\n ` [${issue.id}]` +\n name +\n introducedBy +\n '\\n'\n );\n}\n\nexport function getIacDisplayedOutput(\n iacTest: IacTestResponse,\n testedInfoText: string,\n meta: string,\n prefix: string,\n): string {\n const issuesTextArray = [\n chalk.bold.white('\\nInfrastructure as code issues:'),\n ];\n\n const NotNew = false;\n\n const issues: AnnotatedIacIssue[] = iacTest.result.cloudConfigResults;\n debug(`iac display output - ${issues.length} issues`);\n\n issues\n .sort((a, b) => getSeverityValue(b.severity) - getSeverityValue(a.severity))\n .forEach((issue) => {\n issuesTextArray.push(\n formatIacIssue(issue, NotNew, issue.cloudConfigPath),\n );\n });\n\n const issuesInfoOutput: string[] = [];\n debug(`Iac display output - ${issuesTextArray.length} issues text`);\n if (issuesTextArray.length > 0) {\n issuesInfoOutput.push(issuesTextArray.join('\\n'));\n }\n\n let body = issuesInfoOutput.join('\\n\\n') + '\\n\\n' + meta;\n\n const vulnCountText = `found ${issues.length} issues`;\n const summary = testedInfoText + ', ' + chalk.red.bold(vulnCountText);\n\n body = body + '\\n\\n' + summary;\n\n return prefix + body;\n}\n\nexport function getIacDisplayErrorFileOutput(\n iacFileResult: IacFileInDirectory,\n): string {\n const fileName = pathLib.basename(iacFileResult.filePath);\n return `\n\n-------------------------------------------------------\n\nTesting ${fileName}...\n\n${iacFileResult.failureReason}`;\n}\n\nexport function capitalizePackageManager(type: string | undefined) {\n switch (type) {\n case 'k8sconfig': {\n return 'Kubernetes';\n }\n case 'helmconfig': {\n return 'Helm';\n }\n case 'terraformconfig': {\n return 'Terraform';\n }\n case 'cloudformationconfig': {\n return 'CloudFormation';\n }\n case 'armconfig': {\n return 'ARM';\n }\n default: {\n return 'Infrastructure as Code';\n }\n }\n}\n\ntype ResponseIssues = { issue: AnnotatedIacIssue; targetPath: string }[];\n\n// Used to reference the base path in results.\nconst PROJECT_ROOT_KEY = 'PROJECTROOT';\n\nexport function createSarifOutputForIac(\n iacTestResponses: IacTestResponse[],\n): sarif.Log {\n // If the CLI scans a singular file, then the base path is the current working directory\n // Otherwise it's the computed path\n const basePath = isLocalFolder(iacTestResponses[0].path)\n ? pathLib.resolve('.', iacTestResponses[0].path)\n : pathLib.resolve('.');\n let repoRoot: string;\n try {\n repoRoot = getRepositoryRoot() + '/';\n } catch {\n repoRoot = pathLib.join(basePath, '/'); // the slash at the end is required, otherwise the artifactLocation.uri starts with a slash\n }\n const issues = iacTestResponses.reduce((collect: ResponseIssues, res) => {\n if (res.result) {\n // targetFile is the computed relative path of the scanned file\n // so needs to be cleaned up before assigning to the URI\n const targetPath = getPathRelativeToRepoRoot(\n repoRoot,\n basePath,\n res.targetFile,\n );\n const mapped = res.result.cloudConfigResults.map((issue) => ({\n issue,\n targetPath,\n }));\n collect.push(...mapped);\n }\n return collect;\n }, []);\n\n const tool: sarif.Tool = {\n driver: {\n name: 'Snyk IaC',\n fullName: 'Snyk Infrastructure as Code',\n version: getVersion(),\n informationUri:\n 'https://docs.snyk.io/products/snyk-infrastructure-as-code',\n rules: extractReportingDescriptor(issues),\n },\n };\n return {\n $schema:\n 'https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json',\n version: '2.1.0',\n runs: [\n {\n // https://docs.oasis-open.org/sarif/sarif/v2.1.0/os/sarif-v2.1.0-os.html#_Toc34317498\n originalUriBaseIds: {\n [PROJECT_ROOT_KEY]: {\n uri: pathToFileURL(repoRoot).href,\n description: {\n text: 'The root directory for all project files.',\n },\n },\n },\n\n tool,\n automationDetails: {\n id: 'snyk-iac',\n },\n results: mapIacTestResponseToSarifResults(issues),\n },\n ],\n };\n}\n\nexport function extractReportingDescriptor(\n results: ResponseIssues,\n): sarif.ReportingDescriptor[] {\n const tool: Record<string, sarif.ReportingDescriptor> = {};\n\n results.forEach(({ issue }) => {\n if (tool[issue.id]) {\n return;\n }\n // custom rules may not have some of these fields so we check them first\n const fullDescriptionText = issue.subType\n ? `${upperFirst(issue.severity)} severity - ${issue.subType}`\n : `${upperFirst(issue.severity)} severity`;\n const issueText = issue.iacDescription.issue\n ? `The issue is... \\n${issue.iacDescription.issue}\\n\\n`\n : '';\n const issueMarkdown = issue.iacDescription.issue\n ? `**The issue is...** \\n${issue.iacDescription.issue}\\n\\n`\n : '';\n const impactText = issue.iacDescription.impact\n ? ` The impact of this is... \\n ${issue.iacDescription.impact}\\n\\n`\n : '';\n const impactMarkdown = issue.iacDescription.impact\n ? ` **The impact of this is...** \\n ${issue.iacDescription.impact}\\n\\n`\n : '';\n const resolveText = issue.iacDescription.resolve\n ? ` You can resolve this by... \\n${issue.iacDescription.resolve}`\n : '';\n const resolveMarkdown = issue.iacDescription.resolve\n ? ` **You can resolve this by...** \\n${issue.iacDescription.resolve}`\n : '';\n const tags = ['security'];\n if (issue.subType) {\n tags.push(issue.subType);\n }\n tool[issue.id] = {\n id: issue.id,\n name: upperFirst(camelCase(issue.title)).replace(/ /g, ''),\n shortDescription: {\n text: `${upperFirst(issue.severity)} severity - ${issue.title}`,\n },\n fullDescription: {\n text: fullDescriptionText,\n },\n help: {\n text: `${issueText}${impactText}${resolveText}`.replace(/^\\s+/g, ''),\n markdown: `${issueMarkdown}${impactMarkdown}${resolveMarkdown}`.replace(\n /^\\s+/g,\n '',\n ),\n },\n defaultConfiguration: {\n level: getIssueLevel(issue.severity),\n },\n properties: {\n tags,\n problem: {\n severity: issue.severity,\n },\n },\n helpUri: issue.documentation,\n };\n });\n\n return Object.values(tool);\n}\n\nexport function mapIacTestResponseToSarifResults(\n issues: ResponseIssues,\n): sarif.Result[] {\n return issues.map(({ targetPath, issue }) => {\n const hasLineNumber = issue.lineNumber && issue.lineNumber >= 0;\n // custom rules may not have some of these fields so we check them first\n const affectingText = issue.subType\n ? ` affecting the ${issue.subType}`\n : '';\n return {\n ruleId: issue.id,\n message: {\n text: `This line contains a potential ${issue.severity} severity misconfiguration${affectingText}`,\n },\n locations: [\n {\n physicalLocation: {\n artifactLocation: {\n uri: targetPath,\n uriBaseId: PROJECT_ROOT_KEY,\n },\n // We exclude the `region` key when the line number is missing or -1.\n // https://docs.oasis-open.org/sarif/sarif/v2.0/csprd02/sarif-v2.0-csprd02.html#_Toc10127873\n ...(hasLineNumber && {\n region: {\n startLine: issue.lineNumber,\n },\n }),\n },\n },\n ],\n };\n });\n}\n\nfunction getPathRelativeToRepoRoot(\n repoRoot: string,\n basePath: string,\n filePath: string,\n) {\n const fullPath = pathLib.resolve(basePath, filePath).replace(/\\\\/g, '/');\n return fullPath.replace(repoRoot, '');\n}\n\nexport function shareResultsOutput(iacOutputMeta: IacOutputMeta): string {\n let projectName: string = iacOutputMeta.projectName;\n if (iacOutputMeta?.gitRemoteUrl) {\n // from \"http://github.com/snyk/cli.git\" to \"snyk/cli\"\n projectName = iacOutputMeta.gitRemoteUrl.replace(\n /^https?:\\/\\/github.com\\/(.*)\\.git$/,\n '$1',\n );\n }\n return `Your test results are available at: ${config.ROOT}/org/${iacOutputMeta.orgName}/projects under the name ${projectName}`;\n}\n","export { formatIacTestFailures } from './list';\nexport { failuresTipOutput } from './tip';\n","import { EOL } from 'os';\n\nimport { IacFileInDirectory } from '../../../../types';\nimport { colors, contentPadding } from '../utils';\nimport { IaCTestFailure } from '../types';\n\nexport function formatIacTestFailures(testFailures: IaCTestFailure[]): string {\n const sectionComponents: string[] = [];\n\n const titleOutput = colors.title(`Test Failures`);\n sectionComponents.push(titleOutput);\n\n const testFailuresListOutput = formatFailuresList(testFailures);\n sectionComponents.push(testFailuresListOutput);\n\n return sectionComponents.join(EOL.repeat(2));\n}\n\ninterface TestFailuresByFailureReason {\n [reason: string]: IacFileInDirectory[];\n}\n\nfunction groupTestFailuresByFailureReason(\n testFailures: IaCTestFailure[],\n): TestFailuresByFailureReason {\n return testFailures.reduce((groupedFailures, failure) => {\n const reason = failure.failureReason;\n if (reason) {\n if (!groupedFailures[reason]) {\n groupedFailures[reason] = [];\n }\n\n groupedFailures[reason].push(failure);\n }\n\n return groupedFailures;\n }, {});\n}\n\nfunction formatFailuresList(testFailures: IaCTestFailure[]) {\n const testFailuresByReason = groupTestFailuresByFailureReason(testFailures);\n return Object.entries(testFailuresByReason)\n .map(([failureReason, testFailures]) =>\n formatFailure(failureReason, testFailures),\n )\n .join(EOL.repeat(2));\n}\n\nfunction formatFailure(\n failureReason: string,\n testFailures: IacFileInDirectory[],\n): string {\n const pathPrefix = contentPadding + 'Path: ';\n const pathLeftPadding = ' '.repeat(pathPrefix.length);\n\n return (\n contentPadding +\n colors.failure.bold(failureReason) +\n EOL +\n pathPrefix +\n testFailures\n .map((testFailure) => testFailure.filePath)\n .join(EOL + pathLeftPadding)\n );\n}\n","import { EOL } from 'os';\nimport { contactSupportMessage, reTryMessage } from '../../../../common';\nimport { colors } from '../utils';\n\nexport const failuresTipOutput = colors.info.bold(\n reTryMessage + EOL + contactSupportMessage,\n);\n","export { getIacDisplayedIssues } from './issues-list';\nexport { formatIacTestSummary } from './test-summary';\nexport {\n iacTestTitle,\n spinnerMessage,\n spinnerSuccessMessage,\n shouldLogUserMessages,\n customRulesMessage,\n customRulesReportMessage,\n} from './user-messages';\nexport { formatShareResultsOutput } from './share-results';\nexport { formatIacTestFailures, failuresTipOutput } from './failures';\n","import { FormattedResult } from '../../../../../cli/commands/test/iac/local-execution/types';\nimport { IacOutputMeta } from '../../../../types';\nimport { IacTestOutput } from './types';\n\nexport function formatScanResultsNewOutput(\n oldFormattedResults: FormattedResult[],\n outputMeta: IacOutputMeta,\n): IacTestOutput {\n const newFormattedResults: IacTestOutput = {\n results: {},\n metadata: outputMeta,\n };\n\n oldFormattedResults.forEach((oldFormattedResult) => {\n oldFormattedResult.result.cloudConfigResults.forEach((issue) => {\n if (!newFormattedResults.results[issue.severity]) {\n newFormattedResults.results[issue.severity] = [];\n }\n\n newFormattedResults.results[issue.severity].push({\n issue,\n targetFile: oldFormattedResult.targetFile,\n projectType: oldFormattedResult.result.projectType,\n });\n });\n });\n\n return newFormattedResults;\n}\n","import { EOL } from 'os';\nimport * as capitalize from 'lodash.capitalize';\nimport * as isEmpty from 'lodash.isempty';\nimport * as debug from 'debug';\n\nimport { IacOutputMeta } from '../../../../types';\nimport { colors, contentPadding } from '../utils';\nimport { formatScanResultsNewOutput } from './formatters';\nimport { formatIssue } from './issue';\nimport { SEVERITY } from '../../../../snyk-test/common';\nimport { FormattedOutputResult } from './types';\nimport { FormattedResult } from '../../../../../cli/commands/test/iac/local-execution/types';\n\nexport function getIacDisplayedIssues(\n results: FormattedResult[],\n outputMeta: IacOutputMeta,\n): string {\n const titleOutput = colors.info.bold('Issues');\n\n const formattedResults = formatScanResultsNewOutput(results, outputMeta);\n\n if (isEmpty(formattedResults.results)) {\n return (\n titleOutput +\n EOL +\n contentPadding +\n colors.success.bold('No vulnerable paths were found!')\n );\n }\n\n const severitySectionsOutput = Object.values(SEVERITY)\n .filter((severity) => !!formattedResults.results[severity])\n .map((severity) => {\n const severityResults: FormattedOutputResult[] =\n formattedResults.results[severity];\n\n const titleOutput = colors.title(\n `${capitalize(severity)} Severity Issues: ${severityResults.length}`,\n );\n\n const issuesOutput = severityResults\n .sort(\n (severityResult1, severityResult2) =>\n severityResult1.targetFile.localeCompare(\n severityResult2.targetFile,\n ) ||\n severityResult1.issue.id.localeCompare(severityResult2.issue.id),\n )\n .map(formatIssue)\n .join(EOL.repeat(2));\n\n debug(\n `iac display output - ${severity} severity ${severityResults.length} issues`,\n );\n\n return titleOutput + EOL.repeat(2) + issuesOutput;\n })\n .join(EOL.repeat(2));\n\n return titleOutput + EOL.repeat(2) + severitySectionsOutput;\n}\n","import * as capitalize from 'lodash.capitalize';\nimport chalk from 'chalk';\nimport { EOL } from 'os';\nimport { iacRemediationTypes } from '../../../../iac/constants';\n\nimport { printPath } from '../../../remediation-based-format-issues';\nimport { colors, contentPadding } from '../utils';\nimport { FormattedOutputResult } from './types';\nimport { AnnotatedIacIssue } from '../../../../snyk-test/iac-test-result';\n\nexport function formatIssue(result: FormattedOutputResult): string {\n const titleOutput = formatTitle(result.issue);\n\n const propertiesOutput = formatProperties(result);\n\n return (\n contentPadding +\n titleOutput +\n EOL +\n contentPadding +\n propertiesOutput.join(EOL + contentPadding)\n );\n}\n\nfunction formatTitle(issue: AnnotatedIacIssue): string {\n const severity = issue.severity;\n const titleOutput = colors.severities[severity](\n `[${capitalize([issue.severity])}] ${chalk.bold(issue.title)}`,\n );\n\n return titleOutput;\n}\n\nfunction formatProperties(result: FormattedOutputResult): string[] {\n const remediationKey = iacRemediationTypes?.[result.projectType];\n\n const properties = [\n [\n 'Info',\n `${result.issue.iacDescription.issue}${\n result.issue.iacDescription.issue.endsWith('.') ? '' : '.'\n } ${result.issue.iacDescription.impact}`,\n ],\n [\n 'Rule',\n result.issue.isGeneratedByCustomRule\n ? `custom rule ${result.issue.id}`\n : result.issue.documentation,\n ],\n ['Path', printPath(result.issue.cloudConfigPath, 0)],\n ['File', result.targetFile],\n [\n 'Resolve',\n remediationKey && result.issue.remediation?.[remediationKey]\n ? result.issue.remediation[remediationKey]\n : result.issue.iacDescription.resolve,\n ],\n ].filter(([, val]) => !!val) as [string, string][];\n\n const maxPropertyNameLength = Math.max(\n ...properties.map(([key]) => key.length),\n );\n\n return properties.map(\n ([key, value]) =>\n `${key}: ${' '.repeat(maxPropertyNameLength - key.length)}${value}`,\n );\n}\n","import { IacOutputMeta } from '../../../types';\nimport { shareResultsOutput } from '../v1';\nimport { colors } from './utils';\n\nexport function formatShareResultsOutput(outputMeta: IacOutputMeta) {\n return colors.info.bold(shareResultsOutput(outputMeta));\n}\n","import { EOL } from 'os';\nimport { rightPadWithSpaces } from '../../../right-pad';\nimport { SEVERITY } from '../../../snyk-test/common';\nimport { icon } from '../../../theme';\nimport { IacOutputMeta } from '../../../types';\nimport { colors } from './utils';\nimport { IacTestData } from './types';\n\nconst PAD_LENGTH = 19; // chars to align\nconst INDENT = ' ';\n\nexport function formatIacTestSummary(\n testData: IacTestData,\n outputMeta: IacOutputMeta,\n): string {\n const title = colors.info.bold('Test Summary');\n const summarySections: string[] = [title];\n\n summarySections.push(formatTestMetaSection(outputMeta));\n\n summarySections.push(formatCountsSection(testData));\n\n return summarySections.join(EOL.repeat(2));\n}\n\nfunction formatTestMetaSection(iacMeta: IacOutputMeta): string {\n const metaSectionProperties: [string, string][] = [];\n\n if (iacMeta.orgName) {\n metaSectionProperties.push(['Organization', iacMeta.orgName]);\n }\n\n const metaSection = metaSectionProperties\n .map(([key, value]) =>\n rightPadWithSpaces(`${INDENT}${key}: ${value}`, PAD_LENGTH),\n )\n .join(EOL);\n\n return metaSection;\n}\n\nfunction formatCountsSection(testData: IacTestData): string {\n const filesWithIssues = testData.results.filter(\n (result) => result.result.cloudConfigResults.length,\n ).length;\n const filesWithoutIssues = testData.results.length - filesWithIssues;\n\n const countsSectionProperties: string[] = [];\n\n countsSectionProperties.push(\n `${colors.success.bold(\n icon.VALID,\n )} Files without issues: ${colors.info.bold(`${filesWithoutIssues}`)}`,\n );\n\n countsSectionProperties.push(\n `${colors.failure.bold(icon.ISSUE)} Files with issues: ${colors.info.bold(\n `${filesWithIssues}`,\n )}`,\n );\n\n countsSectionProperties.push(\n `${INDENT}Invalid files: ${colors.info.bold(\n `${testData.failures?.length ?? 0}`,\n )}`,\n );\n\n countsSectionProperties.push(\n `${INDENT}Ignored issues: ${colors.info.bold(`${testData.ignoreCount}`)}`,\n );\n\n let totalIssuesCount = 0;\n\n const issueCountsBySeverities: { [key in SEVERITY]: number } = {\n critical: 0,\n high: 0,\n medium: 0,\n low: 0,\n };\n\n testData.results.forEach((iacTestResponse) => {\n totalIssuesCount += iacTestResponse.result.cloudConfigResults.length;\n iacTestResponse.result.cloudConfigResults.forEach((iacIssue) => {\n issueCountsBySeverities[iacIssue.severity]++;\n });\n });\n\n countsSectionProperties.push(\n `${INDENT}Total issues: ${colors.info.bold(\n `${totalIssuesCount}`,\n )} [ ${colors.severities.critical(\n `${issueCountsBySeverities.critical} critical`,\n )}, ${colors.severities.high(\n `${issueCountsBySeverities.high} high`,\n )}, ${colors.severities.medium(\n `${issueCountsBySeverities.medium} medium`,\n )}, ${colors.severities.low(`${issueCountsBySeverities.low} low`)} ]`,\n );\n\n return countsSectionProperties.join(EOL);\n}\n","import { IaCTestFlags } from '../../../../cli/commands/test/iac/local-execution/types';\nimport { colors } from './utils';\n\n/**\n * Displayed as the title of the test output.\n */\nexport const iacTestTitle = colors.info.bold('Snyk Infrastructure as Code');\n\n/**\n * Progress indication message while files are tested.\n */\nexport const spinnerMessage = colors.info(\n 'Snyk testing Infrastructure as Code configuration issues.',\n);\n\n/**\n * Displayed when a test resolves successfully.\n */\nexport const spinnerSuccessMessage = colors.info('Test completed.');\n\n/**\n * Message for using custom rules.\n */\nexport const customRulesMessage = colors.info(\n 'Using custom rules to generate misconfigurations.',\n);\n\n/**\n * Message for using custom rules.\n */\nexport const customRulesReportMessage = colors.info(\n \"Please note that your custom rules will not be sent to the Snyk platform, and will not be available on the project's page.\",\n);\n\n/**\n * @returns whether or not to include user messages in the output.\n */\nexport function shouldLogUserMessages(\n options: IaCTestFlags,\n iacCliOutputFeatureFlag?: boolean,\n): boolean {\n return !!(\n !options.json &&\n !options.sarif &&\n !options.quiet &&\n iacCliOutputFeatureFlag\n );\n}\n","import chalk, { Chalk } from 'chalk';\nimport { SEVERITY } from '../../../snyk-test/common';\n\ninterface IacOutputColors {\n severities: SeverityColor;\n failure: Chalk;\n success: Chalk;\n info: Chalk;\n title: Chalk;\n}\n\ntype SeverityColor = {\n [severity in SEVERITY]: Chalk;\n};\n\nexport const colors: IacOutputColors = {\n severities: {\n critical: chalk.magenta,\n high: chalk.red,\n medium: chalk.yellow,\n low: chalk.white,\n },\n failure: chalk.red,\n success: chalk.green,\n info: chalk.white,\n title: chalk.white.bold,\n};\n\nexport const contentPadding = ' '.repeat(2);\n","export { formatTestMeta } from './format-test-meta';\nexport { summariseVulnerableResults } from './format-vulnerable-result-summary';\nexport { summariseErrorResults } from './format-error-result-summary';\nexport { formatIssues } from './legacy-format-issue';\nexport { formatLegalInstructions } from './legal-license-instructions';\nexport { formatIssuesWithRemediation } from './remediation-based-format-issues';\nexport { summariseReachableVulns } from './format-reachability';\n\nexport {\n formatErrorMonitorOutput,\n formatMonitorOutput,\n} from './format-monitor-response';\n\nexport * from './docker';\n","const uniq = require('lodash.uniq');\nimport chalk from 'chalk';\n\nimport config from '../../lib/config';\nimport { Options, TestOptions, ShowVulnPaths } from '../../lib/types';\nimport { isLocalFolder } from '../../lib/detect';\nimport { parsePackageString as snykModule } from 'snyk-module';\nimport {\n PINNING_SUPPORTED_PACKAGE_MANAGERS,\n SupportedPackageManagers,\n} from '../../lib/package-managers';\nimport {\n GroupedVuln,\n AnnotatedIssue,\n DockerIssue,\n SEVERITY,\n} from '../../lib/snyk-test/legacy';\nimport { formatLegalInstructions } from './legal-license-instructions';\nimport { getReachabilityText } from './format-reachability';\nimport { colorTextBySeverity } from '../../lib/snyk-test/common';\nimport { PATH_SEPARATOR } from '../constants';\n\nexport function formatIssues(\n vuln: GroupedVuln,\n options: Options & TestOptions,\n) {\n const vulnID = vuln.list[0].id;\n const packageManager = options.packageManager!;\n const localPackageTest = isLocalFolder(options.path);\n const uniquePackages = uniq(\n vuln.list.map((i) => {\n if (i.from[1]) {\n return i.from && i.from[1];\n }\n return i.from;\n }),\n ).join(', ');\n\n const vulnOutput = {\n issueHeading: createSeverityBasedIssueHeading({\n severity: vuln.metadata.severity,\n originalSeverity: vuln.originalSeverity,\n type: vuln.metadata.type,\n packageName: vuln.metadata.name,\n isNew: false,\n }),\n introducedThrough: ' Introduced through: ' + uniquePackages,\n description: ' Description: ' + vuln.title,\n info: ' Info: ' + chalk.underline(config.ROOT + '/vuln/' + vulnID),\n fromPaths: createTruncatedVulnsPathsText(vuln.list, options.showVulnPaths),\n extraInfo: vuln.note ? chalk.bold('\\n Note: ' + vuln.note) : '',\n remediationInfo:\n vuln.metadata.type !== 'license' && localPackageTest\n ? createRemediationText(vuln, packageManager)\n : '',\n fixedIn: options.docker ? createFixedInText(vuln) : '',\n dockerfilePackage: options.docker ? dockerfileInstructionText(vuln) : '',\n legalInstructions: vuln.legalInstructionsArray\n ? chalk.bold('\\n Legal instructions:\\n') +\n ' '.repeat(2) +\n formatLegalInstructions(vuln.legalInstructionsArray, 2)\n : '',\n reachability: vuln.reachability ? createReachabilityInText(vuln) : '',\n };\n\n return (\n `${vulnOutput.issueHeading}\\n` +\n `${vulnOutput.description}\\n` +\n `${vulnOutput.info}\\n` +\n `${vulnOutput.introducedThrough}\\n` +\n vulnOutput.fromPaths +\n // Optional - not always there\n vulnOutput.reachability +\n vulnOutput.remediationInfo +\n vulnOutput.dockerfilePackage +\n vulnOutput.fixedIn +\n vulnOutput.extraInfo +\n vulnOutput.legalInstructions\n );\n}\n\ntype CreateSeverityBasedIssueHeading = {\n severity: SEVERITY;\n originalSeverity?: SEVERITY;\n type: string;\n packageName: string;\n isNew: boolean;\n};\n\nfunction createSeverityBasedIssueHeading({\n severity,\n originalSeverity,\n type,\n packageName,\n isNew,\n}: CreateSeverityBasedIssueHeading) {\n // Example: ✗ Medium severity vulnerability found in xmldom\n const vulnTypeText = type === 'license' ? 'issue' : 'vulnerability';\n\n let originalSeverityStr = '';\n if (originalSeverity && originalSeverity !== severity) {\n originalSeverityStr = ` (originally ${titleCaseText(originalSeverity)})`;\n }\n\n return (\n colorTextBySeverity(\n severity,\n '✗ ' +\n titleCaseText(severity) +\n ` severity${originalSeverityStr} ` +\n vulnTypeText +\n ' found in ' +\n chalk.underline(packageName),\n ) + chalk.bold.magenta(isNew ? ' (new)' : '')\n );\n}\n\nexport function titleCaseText(text) {\n return text[0].toUpperCase() + text.slice(1);\n}\n\nfunction dockerfileInstructionText(vuln) {\n if (vuln.dockerfileInstruction) {\n JSON.stringify(vuln.dockerfileInstruction);\n return `\\n Image layer: '${vuln.dockerfileInstruction}'`;\n }\n\n if (vuln.dockerBaseImage) {\n return `\\n Image layer: Introduced by your base image (${vuln.dockerBaseImage})`;\n }\n\n return '';\n}\nfunction createTruncatedVulnsPathsText(\n vulnList: AnnotatedIssue[],\n show: ShowVulnPaths,\n) {\n if (show === 'none') {\n return '';\n }\n const numberOfPathsToDisplay = show === 'all' ? 1000 : 3;\n const fromPathsArray = vulnList.map((i) => i.from);\n\n const formatedFromPathsArray = fromPathsArray.map((i) => {\n const fromWithoutBaseProject = i.slice(1);\n // If more than one From path\n if (fromWithoutBaseProject.length) {\n return i.slice(1).join(PATH_SEPARATOR);\n }\n // Else issue is in the core package\n return i;\n });\n\n const notShownPathsNumber = fromPathsArray.length - numberOfPathsToDisplay;\n const shouldTruncatePaths = fromPathsArray.length > numberOfPathsToDisplay;\n const truncatedText = `\\n and ${notShownPathsNumber} more...`;\n const formattedPathsText = formatedFromPathsArray\n .slice(0, numberOfPathsToDisplay)\n .join('\\n From: ');\n\n if (fromPathsArray.length > 0) {\n return (\n ' From: ' +\n formattedPathsText +\n (shouldTruncatePaths ? truncatedText : '')\n );\n }\n}\n\nfunction createFixedInText(vuln: GroupedVuln): string {\n if ((vuln as DockerIssue).nearestFixedInVersion) {\n return chalk.bold(\n '\\n Fixed in: ' + (vuln as DockerIssue).nearestFixedInVersion,\n );\n } else if (vuln.fixedIn && vuln.fixedIn.length > 0) {\n return chalk.bold('\\n Fixed in: ' + vuln.fixedIn.join(', '));\n }\n\n return '';\n}\n\nfunction createReachabilityInText(vuln: GroupedVuln): string {\n if (!vuln.reachability) {\n return '';\n }\n const reachabilityText = getReachabilityText(vuln.reachability);\n if (!reachabilityText) {\n return '';\n }\n return `\\n Reachability: ${reachabilityText}`;\n}\n\nfunction createRemediationText(\n vuln: GroupedVuln,\n packageManager: SupportedPackageManagers,\n): string {\n if (\n vuln.fixedIn &&\n PINNING_SUPPORTED_PACKAGE_MANAGERS.includes(packageManager)\n ) {\n const toVersion = vuln.fixedIn.join(' or ');\n const transitive = vuln.list.every((i) => i.from.length > 2);\n const fromVersionArray = vuln.list.map((v) => v.from[1]);\n const fromVersion = fromVersionArray[0];\n if (transitive) {\n return chalk.bold(\n `\\n Remediation:\\n Pin the transitive dependency ${vuln.name} to version ${toVersion}`,\n );\n } else {\n return chalk.bold(\n `\\n Remediation:\\n Upgrade direct dependency ${fromVersion} to ${vuln.name}@${toVersion}`,\n );\n }\n }\n\n if (vuln.isFixable === true) {\n const upgradePathsArray = uniq(\n vuln.list.map((v) => {\n const shouldUpgradeItself = !!v.upgradePath[0];\n const shouldUpgradeDirectDep = !!v.upgradePath[1];\n\n if (shouldUpgradeItself) {\n // If we are testing a library/package like express\n // Then we can suggest they get the latest version\n // Example command: snyk test express@3\n const selfUpgradeInfo =\n v.upgradePath.length > 0\n ? ` (triggers upgrades to ${v.upgradePath.join(PATH_SEPARATOR)})`\n : '';\n const testedPackageName = snykModule(v.upgradePath[0] as string);\n return (\n `You've tested an outdated version of ${testedPackageName[0]}.` +\n +` Upgrade to ${v.upgradePath[0]}${selfUpgradeInfo}`\n );\n }\n if (shouldUpgradeDirectDep) {\n const formattedUpgradePath = v.upgradePath\n .slice(1)\n .join(PATH_SEPARATOR);\n const upgradeTextInfo = v.upgradePath.length\n ? ` (triggers upgrades to ${formattedUpgradePath})`\n : '';\n\n return `Upgrade direct dependency ${v.from[1]} to ${v.upgradePath[1]}${upgradeTextInfo}`;\n }\n\n return 'Some paths have no direct dependency upgrade that can address this issue.';\n }),\n );\n return chalk.bold(\n `\\n Remediation:\\n ${upgradePathsArray.join('\\n ')}`,\n );\n }\n\n if (vuln.fixedIn && vuln.fixedIn.length > 0) {\n return createFixedInText(vuln);\n }\n\n return '';\n}\n","import * as wrap from 'wrap-ansi';\nimport chalk from 'chalk';\n\nimport { LegalInstruction } from '../../lib/snyk-test/legacy';\n\nexport function formatLegalInstructions(\n legalInstructions: LegalInstruction[],\n paddingLength = 4,\n): string {\n const legalContent: string[] = legalInstructions.map((legalData) =>\n wrap(\n chalk.bold(`○ for ${legalData.licenseName}: `) + legalData.legalContent,\n 100,\n )\n .split('\\n')\n .join('\\n' + ' '.repeat(paddingLength)),\n );\n return legalContent.join('\\n' + ' '.repeat(paddingLength));\n}\n","import chalk from 'chalk';\nimport { icon } from '../theme';\nimport config from '../../lib/config';\nimport { TestOptions } from '../../lib/types';\nimport {\n DependencyPins,\n DependencyUpdates,\n GroupedVuln,\n IssueData,\n LegalInstruction,\n PatchRemediation,\n PinRemediation,\n REACHABILITY,\n RemediationChanges,\n SEVERITY,\n UpgradeRemediation,\n} from '../../lib/snyk-test/legacy';\nimport { colorTextBySeverity } from '../../lib/snyk-test/common';\nimport { formatLegalInstructions } from './legal-license-instructions';\nimport {\n formatReachability,\n formatReachablePaths,\n} from './format-reachability';\nimport {\n BasicVulnInfo,\n SampleReachablePaths,\n UpgradesByAffectedPackage,\n} from './types';\nimport { PATH_SEPARATOR } from '../constants';\nimport { getSeverityValue } from './get-severity-value';\n\n// How many reachable paths to show in the output\nconst MAX_REACHABLE_PATHS = 2;\n\nexport function formatIssuesWithRemediation(\n vulns: GroupedVuln[],\n remediationInfo: RemediationChanges,\n options: TestOptions,\n): string[] {\n const basicVulnInfo: {\n [name: string]: BasicVulnInfo;\n } = {};\n\n const basicLicenseInfo: {\n [name: string]: BasicVulnInfo;\n } = {};\n for (const vuln of vulns) {\n const allReachablePaths: SampleReachablePaths = { pathCount: 0, paths: [] };\n for (const issue of vuln.list) {\n const issueReachablePaths = issue.reachablePaths?.paths || [];\n for (const functionReachablePaths of issueReachablePaths) {\n allReachablePaths.paths = allReachablePaths.paths.concat(\n functionReachablePaths.callPaths,\n );\n allReachablePaths.pathCount += functionReachablePaths.callPaths.length;\n }\n }\n const vulnData = {\n title: vuln.title,\n severity: vuln.severity,\n originalSeverity: vuln.originalSeverity,\n isNew: vuln.isNew,\n name: vuln.name,\n type: vuln.metadata.type,\n version: vuln.version,\n fixedIn: vuln.fixedIn,\n note: vuln.note,\n legalInstructions: vuln.legalInstructionsArray,\n paths: vuln.list.map((v) => v.from),\n reachability: vuln.reachability,\n sampleReachablePaths: allReachablePaths,\n };\n\n if (vulnData.type === 'license') {\n basicLicenseInfo[vuln.metadata.id] = vulnData;\n } else {\n basicVulnInfo[vuln.metadata.id] = vulnData;\n }\n }\n\n const results = [''];\n\n let upgradeTextArray: string[];\n if (remediationInfo.pin && Object.keys(remediationInfo.pin).length) {\n const upgradesByAffected: UpgradesByAffectedPackage = {};\n for (const topLevelPkg of Object.keys(remediationInfo.upgrade)) {\n for (const targetPkgStr of remediationInfo.upgrade[topLevelPkg]\n .upgrades) {\n if (!upgradesByAffected[targetPkgStr]) {\n upgradesByAffected[targetPkgStr] = [];\n }\n upgradesByAffected[targetPkgStr].push({\n name: topLevelPkg,\n version: remediationInfo.upgrade[topLevelPkg].upgradeTo,\n });\n }\n }\n upgradeTextArray = constructPinText(\n remediationInfo.pin,\n upgradesByAffected,\n basicVulnInfo,\n options,\n );\n const allVulnIds = new Set();\n Object.keys(remediationInfo.pin).forEach((name) =>\n remediationInfo.pin[name].vulns.forEach((vid) => allVulnIds.add(vid)),\n );\n remediationInfo.unresolved = remediationInfo.unresolved.filter(\n (issue) => !allVulnIds.has(issue.id),\n );\n } else {\n upgradeTextArray = constructUpgradesText(\n remediationInfo.upgrade,\n basicVulnInfo,\n options,\n );\n }\n if (upgradeTextArray.length > 0) {\n results.push(upgradeTextArray.join('\\n'));\n }\n\n const patchedTextArray = constructPatchesText(\n remediationInfo.patch,\n basicVulnInfo,\n options,\n );\n\n if (patchedTextArray.length > 0) {\n results.push(patchedTextArray.join('\\n'));\n }\n\n const unfixableIssuesTextArray = constructUnfixableText(\n remediationInfo.unresolved,\n basicVulnInfo,\n options,\n );\n\n if (unfixableIssuesTextArray.length > 0) {\n results.push(unfixableIssuesTextArray.join('\\n'));\n }\n\n const licenseIssuesTextArray = constructLicenseText(\n basicLicenseInfo,\n options,\n );\n\n if (licenseIssuesTextArray.length > 0) {\n results.push(licenseIssuesTextArray.join('\\n'));\n }\n\n return results;\n}\n\nfunction constructLicenseText(\n basicLicenseInfo: {\n [name: string]: BasicVulnInfo;\n },\n testOptions: TestOptions,\n): string[] {\n if (!(Object.keys(basicLicenseInfo).length > 0)) {\n return [];\n }\n\n const licenseTextArray = [chalk.bold.green('\\nLicense issues:')];\n\n for (const id of Object.keys(basicLicenseInfo)) {\n const licenseText = formatIssue(\n id,\n basicLicenseInfo[id].title,\n basicLicenseInfo[id].severity,\n basicLicenseInfo[id].isNew,\n `${basicLicenseInfo[id].name}@${basicLicenseInfo[id].version}`,\n basicLicenseInfo[id].paths,\n testOptions,\n basicLicenseInfo[id].note,\n undefined, // We can never override license rules, so no originalSeverity here\n basicLicenseInfo[id].legalInstructions,\n );\n licenseTextArray.push('\\n' + licenseText);\n }\n return licenseTextArray;\n}\n\nfunction constructPatchesText(\n patches: {\n [name: string]: PatchRemediation;\n },\n basicVulnInfo: {\n [name: string]: BasicVulnInfo;\n },\n testOptions: TestOptions,\n): string[] {\n if (!(Object.keys(patches).length > 0)) {\n return [];\n }\n const patchedTextArray = [chalk.bold.green('\\nPatchable issues:')];\n for (const id of Object.keys(patches)) {\n if (!basicVulnInfo[id]) {\n continue;\n }\n if (basicVulnInfo[id].type === 'license') {\n continue;\n }\n\n // todo: add vulnToPatch package name\n const packageAtVersion = `${basicVulnInfo[id].name}@${basicVulnInfo[id].version}`;\n const patchedText = `\\n Patch available for ${chalk.bold.whiteBright(\n packageAtVersion,\n )}\\n`;\n const thisPatchFixes = formatIssue(\n id,\n basicVulnInfo[id].title,\n basicVulnInfo[id].severity,\n basicVulnInfo[id].isNew,\n `${basicVulnInfo[id].name}@${basicVulnInfo[id].version}`,\n basicVulnInfo[id].paths,\n testOptions,\n basicVulnInfo[id].note,\n basicVulnInfo[id].originalSeverity,\n );\n patchedTextArray.push(patchedText + thisPatchFixes);\n }\n\n return patchedTextArray;\n}\n\nfunction thisUpgradeFixes(\n vulnIds: string[],\n basicVulnInfo: Record<string, BasicVulnInfo>,\n testOptions: TestOptions,\n) {\n return vulnIds\n .filter((id) => basicVulnInfo[id]) // basicVulnInfo only contains issues with the specified severity levels\n .sort(\n (a, b) =>\n getSeverityValue(basicVulnInfo[a].severity) -\n getSeverityValue(basicVulnInfo[b].severity),\n )\n .filter((id) => basicVulnInfo[id].type !== 'license')\n .map((id) =>\n formatIssue(\n id,\n basicVulnInfo[id].title,\n basicVulnInfo[id].severity,\n basicVulnInfo[id].isNew,\n `${basicVulnInfo[id].name}@${basicVulnInfo[id].version}`,\n basicVulnInfo[id].paths,\n testOptions,\n basicVulnInfo[id].note,\n basicVulnInfo[id].originalSeverity,\n [],\n basicVulnInfo[id].reachability,\n basicVulnInfo[id].sampleReachablePaths,\n ),\n )\n .join('\\n');\n}\n\nfunction processUpgrades(\n sink: string[],\n upgradesByDep: DependencyUpdates | DependencyPins,\n deps: string[],\n basicVulnInfo: Record<string, BasicVulnInfo>,\n testOptions: TestOptions,\n) {\n for (const dep of deps) {\n const data = upgradesByDep[dep];\n const upgradeDepTo = data.upgradeTo;\n const vulnIds =\n (data as UpgradeRemediation).vulns || (data as PinRemediation).vulns;\n const upgradeText = `\\n Upgrade ${chalk.bold.whiteBright(\n dep,\n )} to ${chalk.bold.whiteBright(upgradeDepTo)} to fix\\n`;\n sink.push(\n upgradeText + thisUpgradeFixes(vulnIds, basicVulnInfo, testOptions),\n );\n }\n}\n\nfunction constructUpgradesText(\n upgrades: DependencyUpdates,\n basicVulnInfo: {\n [name: string]: BasicVulnInfo;\n },\n testOptions: TestOptions,\n): string[] {\n if (!(Object.keys(upgrades).length > 0)) {\n return [];\n }\n\n const upgradeTextArray = [chalk.bold.green('\\nIssues to fix by upgrading:')];\n processUpgrades(\n upgradeTextArray,\n upgrades,\n Object.keys(upgrades),\n basicVulnInfo,\n testOptions,\n );\n return upgradeTextArray;\n}\n\nfunction constructPinText(\n pins: DependencyPins,\n upgradesByAffected: UpgradesByAffectedPackage, // classical \"remediation via top-level dep\" upgrades\n basicVulnInfo: Record<string, BasicVulnInfo>,\n testOptions: TestOptions,\n): string[] {\n if (!Object.keys(pins).length) {\n return [];\n }\n\n const upgradeTextArray: string[] = [];\n upgradeTextArray.push(\n chalk.bold.green('\\nIssues to fix by upgrading dependencies:'),\n );\n\n // First, direct upgrades\n\n const upgradeables = Object.keys(pins).filter(\n (name) => !pins[name].isTransitive,\n );\n if (upgradeables.length) {\n processUpgrades(\n upgradeTextArray,\n pins,\n upgradeables,\n basicVulnInfo,\n testOptions,\n );\n }\n\n // Second, pins\n const pinables = Object.keys(pins).filter((name) => pins[name].isTransitive);\n\n if (pinables.length) {\n for (const pkgName of pinables) {\n const data = pins[pkgName];\n const vulnIds = data.vulns;\n const upgradeDepTo = data.upgradeTo;\n const upgradeText = `\\n Pin ${chalk.bold.whiteBright(\n pkgName,\n )} to ${chalk.bold.whiteBright(upgradeDepTo)} to fix`;\n upgradeTextArray.push(upgradeText);\n upgradeTextArray.push(\n thisUpgradeFixes(vulnIds, basicVulnInfo, testOptions),\n );\n\n // Finally, if we have some upgrade paths that fix the same issues, suggest them as well.\n const topLevelUpgradesAlreadySuggested = new Set();\n for (const vid of vulnIds) {\n for (const topLevelPkg of upgradesByAffected[\n pkgName + '@' + basicVulnInfo[vid].version\n ] || []) {\n const setKey = `${topLevelPkg.name}\\n${topLevelPkg.version}`;\n if (!topLevelUpgradesAlreadySuggested.has(setKey)) {\n topLevelUpgradesAlreadySuggested.add(setKey);\n upgradeTextArray.push(\n ' The issues above can also be fixed by upgrading top-level dependency ' +\n `${topLevelPkg.name} to ${topLevelPkg.version}`,\n );\n }\n }\n }\n }\n }\n\n return upgradeTextArray;\n}\n\nfunction constructUnfixableText(\n unresolved: IssueData[],\n basicVulnInfo: Record<string, BasicVulnInfo>,\n testOptions: TestOptions,\n) {\n if (!(unresolved.length > 0)) {\n return [];\n }\n const unfixableIssuesTextArray = [\n chalk.bold.white('\\nIssues with no direct upgrade or patch:'),\n ];\n for (const issue of unresolved) {\n const issueInfo = basicVulnInfo[issue.id];\n if (!issueInfo) {\n // basicVulnInfo only contains issues with the specified severity levels\n continue;\n }\n\n const extraInfo =\n issue.fixedIn && issue.fixedIn.length\n ? `\\n This issue was fixed in versions: ${chalk.bold(\n issue.fixedIn.join(', '),\n )}`\n : '\\n No upgrade or patch available';\n unfixableIssuesTextArray.push(\n formatIssue(\n issue.id,\n issue.title,\n issue.severity,\n issue.isNew,\n `${issue.packageName}@${issue.version}`,\n issueInfo.paths,\n testOptions,\n issueInfo.note,\n issueInfo.originalSeverity,\n [],\n issue.reachability,\n ) + `${extraInfo}`,\n );\n }\n\n if (unfixableIssuesTextArray.length === 1) {\n // seems we still only have\n // the initial section title, so nothing to return\n return [];\n }\n\n return unfixableIssuesTextArray;\n}\n\nexport function printPath(path: string[], slice = 1) {\n return path.slice(slice).join(PATH_SEPARATOR);\n}\n\nexport function formatIssue(\n id: string,\n title: string,\n severity: SEVERITY,\n isNew: boolean,\n vulnerableModule: string,\n paths: string[][],\n testOptions: TestOptions,\n note: string | false,\n originalSeverity?: SEVERITY,\n legalInstructions?: LegalInstruction[],\n reachability?: REACHABILITY,\n sampleReachablePaths?: SampleReachablePaths,\n): string {\n const newBadge = isNew ? ' (new)' : '';\n const name = vulnerableModule ? ` in ${chalk.bold(vulnerableModule)}` : '';\n let legalLicenseInstructionsText;\n if (legalInstructions) {\n legalLicenseInstructionsText = formatLegalInstructions(legalInstructions);\n }\n let reachabilityText = '';\n if (reachability) {\n reachabilityText = formatReachability(reachability);\n }\n\n let introducedBy = '';\n\n if (\n testOptions.showVulnPaths === 'some' &&\n paths &&\n paths.find((p) => p.length > 1)\n ) {\n // In this mode, we show only one path by default, for compactness\n const pathStr = printPath(paths[0]);\n introducedBy =\n paths.length === 1\n ? `\\n introduced by ${pathStr}`\n : `\\n introduced by ${pathStr} and ${chalk.cyanBright(\n '' + (paths.length - 1),\n )} other path(s)`;\n } else if (testOptions.showVulnPaths === 'all' && paths) {\n introducedBy =\n '\\n introduced by:' +\n paths\n .slice(0, 1000)\n .map((p) => '\\n ' + printPath(p))\n .join('');\n if (paths.length > 1000) {\n introducedBy += `\\n and ${chalk.cyanBright(\n '' + (paths.length - 1),\n )} other path(s)`;\n }\n }\n\n const reachableVia = formatReachablePaths(\n sampleReachablePaths,\n MAX_REACHABLE_PATHS,\n reachablePathsTemplate,\n );\n\n let originalSeverityStr = '';\n if (originalSeverity && originalSeverity !== severity) {\n originalSeverityStr = ` (originally ${titleCaseText(originalSeverity)})`;\n }\n\n return (\n colorTextBySeverity(\n severity,\n ` ${icon.ISSUE} ${chalk.bold(title)}${newBadge} [${titleCaseText(\n severity,\n )} Severity${originalSeverityStr}]`,\n ) +\n reachabilityText +\n `[${config.ROOT}/vuln/${id}]` +\n name +\n reachableVia +\n introducedBy +\n (legalLicenseInstructionsText\n ? `${chalk.bold(\n '\\n Legal instructions',\n )}:\\n ${legalLicenseInstructionsText}`\n : '') +\n (note ? `${chalk.bold('\\n Note')}:\\n ${note}` : '')\n );\n}\n\nfunction titleCaseText(text) {\n return text[0].toUpperCase() + text.slice(1);\n}\n\nfunction reachablePathsTemplate(\n samplePaths: string[],\n extraPathsCount: number,\n): string {\n if (samplePaths.length === 0 && extraPathsCount === 0) {\n return '';\n }\n if (samplePaths.length === 0) {\n return `\\n reachable via at least ${extraPathsCount} paths`;\n }\n let reachableVia = '\\n reachable via:\\n';\n for (const p of samplePaths) {\n reachableVia += ` ${p}\\n`;\n }\n if (extraPathsCount > 0) {\n reachableVia += ` and at least ${chalk.cyanBright(\n '' + extraPathsCount,\n )} other path(s)`;\n }\n return reachableVia;\n}\n","import * as sarif from 'sarif';\nimport { TestResult } from '../snyk-test/legacy';\nimport { SEVERITY } from '../snyk-test/legacy';\nconst upperFirst = require('lodash.upperfirst');\n\nexport function createSarifOutputForContainers(\n testResults: TestResult[],\n): sarif.Log {\n const sarifRes: sarif.Log = {\n version: '2.1.0',\n runs: [],\n };\n\n testResults.forEach((testResult) => {\n sarifRes.runs.push({\n tool: getTool(testResult),\n results: getResults(testResult),\n });\n });\n\n return sarifRes;\n}\n\nexport function getIssueLevel(\n severity: SEVERITY | 'none',\n): sarif.ReportingConfiguration.level {\n return severity === SEVERITY.HIGH || severity === SEVERITY.CRITICAL\n ? 'error'\n : 'warning';\n}\n\nexport function getTool(testResult): sarif.Tool {\n const tool: sarif.Tool = {\n driver: {\n name: 'Snyk Container',\n rules: [],\n },\n };\n\n if (!testResult.vulnerabilities) {\n return tool;\n }\n\n const pushedIds = {};\n tool.driver.rules = testResult.vulnerabilities\n .map((vuln) => {\n if (pushedIds[vuln.id]) {\n return;\n }\n const level = getIssueLevel(vuln.severity);\n const cve = vuln['identifiers']['CVE'][0];\n pushedIds[vuln.id] = true;\n return {\n id: vuln.id,\n shortDescription: {\n text: `${upperFirst(vuln.severity)} severity - ${\n vuln.title\n } vulnerability in ${vuln.packageName}`,\n },\n fullDescription: {\n text: cve\n ? `(${cve}) ${vuln.name}@${vuln.version}`\n : `${vuln.name}@${vuln.version}`,\n },\n help: {\n text: '',\n markdown: vuln.description,\n },\n defaultConfiguration: {\n level: level,\n },\n properties: {\n tags: ['security', ...vuln.identifiers.CWE],\n },\n };\n })\n .filter(Boolean);\n return tool;\n}\n\nexport function getResults(testResult): sarif.Result[] {\n const results: sarif.Result[] = [];\n\n if (!testResult.vulnerabilities) {\n return results;\n }\n testResult.vulnerabilities.forEach((vuln) => {\n results.push({\n ruleId: vuln.id,\n message: {\n text: `This file introduces a vulnerable ${vuln.packageName} package with a ${vuln.severity} severity vulnerability.`,\n },\n locations: [\n {\n physicalLocation: {\n artifactLocation: {\n uri: testResult.displayTargetFile,\n },\n region: {\n startLine: vuln.lineNumber || 1,\n },\n },\n },\n ],\n });\n });\n return results;\n}\n","import { isMultiProjectScan } from '../is-multi-project-scan';\n\nexport function showAllProjectsTip(\n packageManager,\n options,\n foundProjectCount,\n): string {\n if (\n packageManager === 'gradle' ||\n !foundProjectCount ||\n isMultiProjectScan(options)\n ) {\n return '';\n }\n return (\n `Tip: Detected multiple supported manifests (${foundProjectCount}), ` +\n 'use --all-projects to scan all of them at once.'\n );\n}\n","import { isMultiProjectScan } from '../is-multi-project-scan';\n\nexport function showGradleSubProjectsTip(\n packageManager,\n options,\n foundProjectCount,\n): string {\n if (\n packageManager !== 'gradle' ||\n !foundProjectCount ||\n isMultiProjectScan(options) ||\n options.allSubProjects\n ) {\n return '';\n }\n\n return (\n `Tip: This project has multiple sub-projects (${foundProjectCount}), ` +\n 'use --all-sub-projects flag to scan all sub-projects.'\n );\n}\n","import { SupportedPackageManagers } from '../package-managers';\nimport { Options, SupportedProjectTypes, TestOptions } from '../types';\n\nimport { showAllProjectsTip } from './show-all-projects-tip';\nimport { showGradleSubProjectsTip } from './show-all-sub-projects-tip';\n\nexport function showMultiScanTip(\n projectType: SupportedProjectTypes | SupportedPackageManagers,\n options: Options & TestOptions,\n foundProjectCount?: number,\n): string {\n const gradleSubProjectsTip = showGradleSubProjectsTip(\n projectType,\n options,\n foundProjectCount,\n );\n if (gradleSubProjectsTip) {\n return gradleSubProjectsTip;\n }\n const allProjectsTip = showAllProjectsTip(\n projectType,\n options,\n foundProjectCount,\n );\n if (allProjectsTip) {\n return allProjectsTip;\n }\n return '';\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\n\nexport function getFileContents(\n root: string,\n fileName: string,\n): {\n content: string;\n fileName: string;\n} {\n const fullPath = path.resolve(root, fileName);\n if (!fs.existsSync(fullPath)) {\n throw new Error(\n 'Manifest ' + fileName + ' not found at location: ' + fileName,\n );\n }\n const content = fs.readFileSync(fullPath, 'utf-8');\n return {\n content,\n fileName,\n };\n}\n","import { ParserFileType } from '@snyk/cloud-config-parser';\n\nexport type IacProjectTypes =\n | 'k8sconfig'\n | 'terraformconfig'\n | 'cloudformationconfig'\n | 'armconfig'\n | 'customconfig'\n | 'multiiacconfig';\nexport type IacFileTypes = ParserFileType | 'tf' | 'tfvars';\n\nexport enum IacProjectType {\n K8S = 'k8sconfig',\n TERRAFORM = 'terraformconfig',\n CLOUDFORMATION = 'cloudformationconfig',\n ARM = 'armconfig',\n CUSTOM = 'customconfig',\n MULTI_IAC = 'multiiacconfig',\n}\n\nexport const TEST_SUPPORTED_IAC_PROJECTS: IacProjectTypes[] = [\n IacProjectType.K8S,\n IacProjectType.TERRAFORM,\n IacProjectType.CLOUDFORMATION,\n IacProjectType.ARM,\n IacProjectType.MULTI_IAC,\n IacProjectType.CUSTOM,\n];\n\nexport const iacRemediationTypes: { [k in IacProjectTypes]?: string } = {\n armconfig: 'arm',\n cloudformationconfig: 'cloudformation',\n k8sconfig: 'kubernetes',\n terraformconfig: 'terraform',\n};\n","import { statSync } from 'fs';\nimport { dirname } from 'path';\nimport * as childProcess from 'child_process';\n\nexport function getRepositoryRootForPath(p: string) {\n return getRepositoryRoot(getWorkingDirectoryForPath(p));\n}\n\nexport function getRepositoryRoot(cwd?: string) {\n const proc = childProcess.spawnSync('git', ['rev-parse', '--show-toplevel'], {\n cwd,\n });\n if (proc.status !== 0) {\n throw new Error();\n }\n return proc.stdout.toString().trim();\n}\n\nexport function getWorkingDirectoryForPath(p: string) {\n if (statSync(p).isDirectory()) {\n return p;\n }\n return dirname(p);\n}\n","import { Options, TestOptions, MonitorOptions, PolicyOptions } from './types';\n\nexport function isMultiProjectScan(\n options: Partial<Options & TestOptions & MonitorOptions & PolicyOptions>,\n): boolean {\n return !!(options.allProjects || options.yarnWorkspaces);\n}\n","const debug = require('debug')('snyk-json');\n\n/**\n * Attempt to json-stringify an object which is potentially very large and might exceed the string limit.\n * If it does exceed the string limit, try again without pretty-print to hopefully come out below the string limit.\n * @param obj the object from which you want to get a JSON string\n */\nexport function jsonStringifyLargeObject(obj: any): string {\n let res = '';\n try {\n // first try pretty-print\n res = JSON.stringify(obj, null, 2);\n return res;\n } catch (err) {\n // if that doesn't work, try non-pretty print\n debug('JSON.stringify failed - trying again without pretty print', err);\n res = JSON.stringify(obj);\n return res;\n }\n}\n","const merge = require('lodash.merge');\nimport * as Debug from 'debug';\nimport { legacyPlugin as pluginApi } from '@snyk/cli-interface';\n\nconst debug = Debug('snyk-module-info');\n\nexport function ModuleInfo(plugin, policy) {\n return {\n async inspect(\n root,\n targetFile,\n options,\n ): Promise<pluginApi.SinglePackageResult | pluginApi.MultiProjectResult> {\n const pluginOptions = merge(\n {\n args: options._doubleDashArgs,\n },\n options,\n );\n\n debug('calling plugin inspect()', { root, targetFile, pluginOptions });\n const info = await plugin.inspect(root, targetFile, pluginOptions);\n debug('plugin inspect() done');\n\n // attach policy if not provided by plugin\n if (policy && !info.package.policy) {\n info.package.policy = policy.toString();\n }\n\n return info;\n },\n };\n}\n","import { DepTree } from '../types';\n\nexport function countTotalDependenciesInTree(depTree: DepTree): number {\n let count = 0;\n if (depTree.dependencies) {\n for (const name of Object.keys(depTree.dependencies)) {\n const dep = depTree.dependencies[name];\n if (dep) {\n count += 1 + countTotalDependenciesInTree(dep);\n }\n }\n }\n return count;\n}\n","/**\n * This is to count the number of \"contributing\" developers using Snyk on a given repo.\n * \"Contributing\" is defined as having contributed a commit in the last 90 days.\n * This is use only on the `snyk monitor` command as that is used to monitor a project's dependencies in an\n * on-going manner.\n * It collects the email of a git user and the most recent commit timestamp (both per the `git log`\n * output) and can be disabled by config (see https://snyk.io/policies/tracking-and-analytics/).\n */\nimport { exec } from 'child_process';\nimport { Contributor } from '../types';\n\nexport const SERIOUS_DELIMITER = '_SNYK_SEPARATOR_';\nexport const CONTRIBUTING_DEVELOPER_PERIOD_DAYS = 90;\n// Limit the number of commits returned from `git log` command to stay within maxBuffer limit\nexport const MAX_COMMITS_IN_GIT_LOG = 500;\n\nexport async function getContributors(\n { endDate, periodDays, repoPath } = {\n endDate: new Date(),\n periodDays: CONTRIBUTING_DEVELOPER_PERIOD_DAYS,\n repoPath: process.cwd(),\n },\n): Promise<Contributor[]> {\n const timestampStartOfContributingDeveloperPeriod = getTimestampStartOfContributingDevTimeframe(\n endDate,\n periodDays,\n );\n const gitLogResults = await runGitLog(\n timestampStartOfContributingDeveloperPeriod,\n Math.floor(endDate.getTime() / 1000),\n repoPath,\n execShell,\n );\n const stats: GitRepoCommitStats = parseGitLog(gitLogResults);\n return stats.getRepoContributors();\n}\n\nexport class GitCommitInfo {\n authorEmail: string;\n commitTimestamp: string; // use ISO 8601 format\n\n constructor(authorEmail: string, commitTimestamp: string) {\n this.authorEmail = authorEmail;\n this.commitTimestamp = commitTimestamp;\n }\n}\n\nexport class GitRepoCommitStats {\n commitInfos: GitCommitInfo[];\n\n constructor(commitInfos: GitCommitInfo[]) {\n this.commitInfos = commitInfos;\n }\n\n public static empty(): GitRepoCommitStats {\n return new GitRepoCommitStats([]);\n }\n\n public addCommitInfo(info: GitCommitInfo): void {\n this.commitInfos.push(info);\n }\n\n public getUniqueAuthorsCount(): number {\n const uniqueAuthorEmails = this.getUniqueAuthorEmails();\n return uniqueAuthorEmails.size;\n }\n\n public getCommitsCount(): number {\n return this.commitInfos.length;\n }\n\n public getUniqueAuthorEmails(): Set<string> {\n const allCommitAuthorHashedEmails: string[] = this.commitInfos.map(\n (c) => c.authorEmail,\n );\n const uniqueAuthorEmails: Set<string> = new Set(\n allCommitAuthorHashedEmails,\n );\n return uniqueAuthorEmails;\n }\n\n public getRepoContributors(): Contributor[] {\n const uniqueAuthorEmails = this.getUniqueAuthorEmails();\n const contributors: Contributor[] = [];\n for (const nextUniqueAuthorEmail of uniqueAuthorEmails) {\n const latestCommitTimestamp = this.getMostRecentCommitTimestamp(\n nextUniqueAuthorEmail,\n );\n contributors.push({\n email: nextUniqueAuthorEmail,\n lastCommitDate: latestCommitTimestamp,\n });\n }\n return contributors;\n }\n\n public getMostRecentCommitTimestamp(authorHashedEmail: string): string {\n for (const nextGI of this.commitInfos) {\n if (nextGI.authorEmail === authorHashedEmail) {\n return nextGI.commitTimestamp;\n }\n }\n return '';\n }\n}\n\nexport function parseGitLogLine(logLine: string): GitCommitInfo {\n const lineComponents = logLine.split(SERIOUS_DELIMITER);\n const authorEmail = lineComponents[2];\n const commitTimestamp = lineComponents[3];\n const commitInfo = new GitCommitInfo(authorEmail, commitTimestamp);\n return commitInfo;\n}\n\nexport function parseGitLog(gitLog: string): GitRepoCommitStats {\n if (gitLog.trim() === '') {\n return GitRepoCommitStats.empty();\n }\n const logLines = separateLines(gitLog);\n const logLineInfos: GitCommitInfo[] = logLines.map(parseGitLogLine);\n const stats: GitRepoCommitStats = new GitRepoCommitStats(logLineInfos);\n return stats;\n}\n\n/**\n * @returns time stamp in seconds-since-epoch of 90 days ago since 90 days is the \"contributing devs\" timeframe\n */\nexport function getTimestampStartOfContributingDevTimeframe(\n dNow: Date,\n timespanInDays: number = CONTRIBUTING_DEVELOPER_PERIOD_DAYS,\n): number {\n const nowUtcEpocMS = dNow.getTime();\n const nowUtcEpocS = Math.floor(nowUtcEpocMS / 1000);\n const ONE_DAY_IN_SECONDS = 86400;\n const lookbackTimespanSeconds = timespanInDays * ONE_DAY_IN_SECONDS;\n const startOfPeriodEpochSeconds = nowUtcEpocS - lookbackTimespanSeconds;\n return startOfPeriodEpochSeconds;\n}\n\nexport async function runGitLog(\n timestampEpochSecondsStartOfPeriod: number,\n timestampEpochSecondsEndOfPeriod: number,\n repoPath: string,\n fnShellout: (cmd: string, workingDirectory: string) => Promise<string>,\n): Promise<string> {\n try {\n const gitLogCommand = `git --no-pager log --pretty=tformat:\"%H${SERIOUS_DELIMITER}%an${SERIOUS_DELIMITER}%ae${SERIOUS_DELIMITER}%aI\" --after=\"${timestampEpochSecondsStartOfPeriod}\" --until=\"${timestampEpochSecondsEndOfPeriod}\" --max-count=${MAX_COMMITS_IN_GIT_LOG}`;\n const gitLogStdout: string = await fnShellout(gitLogCommand, repoPath);\n return gitLogStdout;\n } catch {\n return '';\n }\n}\n\nexport function separateLines(inputText: string): string[] {\n const linuxStyleNewLine = '\\n';\n const windowsStyleNewLine = '\\r\\n';\n const reg = new RegExp(`${linuxStyleNewLine}|${windowsStyleNewLine}`);\n const lines = inputText.trim().split(reg);\n return lines;\n}\n\nexport function execShell(\n cmd: string,\n workingDirectory: string,\n): Promise<string> {\n const options = {\n cwd: workingDirectory,\n };\n\n return new Promise((resolve, reject) => {\n exec(cmd, options, (error, stdout, stderr) => {\n if (error) {\n const exitCode = error.code;\n\n const e = new ShellOutError(\n error.message,\n exitCode,\n stdout,\n stderr,\n error,\n );\n reject(e);\n } else {\n resolve(stdout ? stdout : stderr);\n }\n });\n });\n}\n\nexport class ShellOutError extends Error {\n public innerError: Error | undefined;\n public exitCode: number | undefined;\n public stdout: string | undefined;\n public stderr: string | undefined;\n\n constructor(\n message: string,\n exitCode: number | undefined,\n stdout: string,\n stderr: string,\n innerError: Error | undefined,\n ) {\n super(message);\n this.exitCode = exitCode;\n this.stdout = stdout;\n this.stderr = stderr;\n this.innerError = innerError;\n }\n}\n","import { DepTree } from '../types';\n\nexport function dropEmptyDeps(depTree: DepTree) {\n if (depTree.dependencies) {\n const keys = Object.keys(depTree.dependencies);\n if (keys.length === 0) {\n delete depTree.dependencies;\n } else {\n for (const k of keys) {\n dropEmptyDeps(depTree.dependencies[k]);\n }\n }\n }\n return depTree;\n}\n","import { DepTree } from '../types';\n\ninterface FilteredDepTree {\n filteredDepTree: DepTree;\n missingDeps: string[];\n}\n\nexport function filterOutMissingDeps(depTree: DepTree): FilteredDepTree {\n const filteredDeps = {};\n const missingDeps: string[] = [];\n\n if (!depTree.dependencies) {\n return {\n filteredDepTree: depTree,\n missingDeps,\n };\n }\n\n for (const depKey of Object.keys(depTree.dependencies)) {\n const dep = depTree.dependencies[depKey];\n if (\n (dep as any).missingLockFileEntry ||\n ((dep as any).labels && (dep as any).labels.missingLockFileEntry)\n ) {\n // TODO(kyegupov): add field to the type\n missingDeps.push(`${dep.name}@${dep.version}`);\n } else {\n filteredDeps[depKey] = dep;\n }\n }\n const filteredDepTree: DepTree = {\n ...depTree,\n dependencies: filteredDeps,\n };\n\n return {\n filteredDepTree,\n missingDeps,\n };\n}\n","import * as Debug from 'debug';\nimport * as path from 'path';\nimport * as depGraphLib from '@snyk/dep-graph';\nimport * as snyk from '..';\nimport { apiOrOAuthTokenExists, getAuthHeader } from '../api-token';\nimport { makeRequest } from '../request';\nimport config from '../config';\nimport * as os from 'os';\nconst get = require('lodash.get');\nimport { isCI } from '../is-ci';\nimport * as analytics from '../analytics';\nimport {\n DepTree,\n MonitorMeta,\n MonitorResult,\n PolicyOptions,\n MonitorOptions,\n Options,\n Contributor,\n ProjectAttributes,\n Tag,\n} from '../types';\nimport * as projectMetadata from '../project-metadata';\nimport {\n MonitorError,\n ConnectionTimeoutError,\n FailedToRunTestError,\n errorMessageWithRetry,\n} from '../errors';\nimport { pruneGraph } from '../prune';\nimport { GRAPH_SUPPORTED_PACKAGE_MANAGERS } from '../package-managers';\nimport { countTotalDependenciesInTree } from './count-total-deps-in-tree';\nimport { filterOutMissingDeps } from './filter-out-missing-deps';\nimport { dropEmptyDeps } from './drop-empty-deps';\nimport { pruneTree } from './prune-dep-tree';\nimport { findAndLoadPolicy } from '../policy';\nimport { PluginMetadata } from '@snyk/cli-interface/legacy/plugin';\nimport {\n CallGraph,\n CallGraphError,\n ScannedProject,\n} from '@snyk/cli-interface/legacy/common';\nimport { isGitTarget } from '../project-metadata/types';\nimport { serializeCallGraphWithMetrics } from '../reachable-vulns';\nimport {\n getNameDepTree,\n getNameDepGraph,\n getProjectName,\n getTargetFile,\n} from './utils';\nimport { countPathsToGraphRoot } from '../utils';\nimport * as alerts from '../alerts';\nimport { abridgeErrorMessage } from '../error-format';\n\nconst debug = Debug('snyk');\n\nconst ANALYTICS_PAYLOAD_MAX_LENGTH = 1024;\n\ninterface MonitorBody {\n meta: Meta;\n policy: string;\n package?: DepTree;\n callGraph?: CallGraph;\n target: {};\n targetFileRelativePath: string;\n targetFile: string;\n contributors?: Contributor[];\n}\n\ninterface Meta {\n method?: string;\n hostname: string;\n id: string;\n ci: boolean;\n pid: number;\n node: string;\n master: boolean;\n name: string;\n version: string;\n org?: string;\n pluginName: string;\n pluginRuntime: string;\n dockerImageId?: string;\n dockerBaseImage?: string;\n projectName: string;\n}\n\nexport async function monitor(\n root: string,\n meta: MonitorMeta,\n scannedProject: ScannedProject,\n options: Options & MonitorOptions & PolicyOptions,\n pluginMeta: PluginMetadata,\n targetFileRelativePath?: string,\n contributors?: Contributor[],\n projectAttributes?: ProjectAttributes,\n tags?: Tag[],\n): Promise<MonitorResult> {\n apiOrOAuthTokenExists();\n\n const packageManager = meta.packageManager;\n analytics.add('packageManager', packageManager);\n analytics.add('isDocker', !!meta.isDocker);\n\n if (scannedProject.depGraph) {\n return await monitorDepGraph(\n root,\n meta,\n scannedProject,\n pluginMeta,\n options,\n targetFileRelativePath,\n contributors,\n projectAttributes,\n tags,\n );\n }\n\n if (GRAPH_SUPPORTED_PACKAGE_MANAGERS.includes(packageManager)) {\n return await monitorDepGraphFromDepTree(\n root,\n meta,\n scannedProject,\n pluginMeta,\n options,\n targetFileRelativePath,\n contributors,\n projectAttributes,\n tags,\n );\n }\n\n return await monitorDepTree(\n root,\n meta,\n scannedProject,\n pluginMeta,\n options,\n targetFileRelativePath,\n contributors,\n projectAttributes,\n tags,\n );\n}\n\nasync function monitorDepTree(\n root: string,\n meta: MonitorMeta,\n scannedProject: ScannedProject,\n pluginMeta: PluginMetadata,\n options: MonitorOptions & PolicyOptions,\n targetFileRelativePath?: string,\n contributors?: Contributor[],\n projectAttributes?: ProjectAttributes,\n tags?: Tag[],\n): Promise<MonitorResult> {\n let treeMissingDeps: string[] = [];\n\n const packageManager = meta.packageManager;\n\n let depTree = scannedProject.depTree;\n\n if (!depTree) {\n debug(\n 'scannedProject is missing depGraph or depTree, cannot run test/monitor',\n );\n throw new FailedToRunTestError(\n errorMessageWithRetry('Your monitor request could not be completed.'),\n );\n }\n\n let prePruneDepCount;\n if (meta.prune) {\n debug('prune used, counting total dependencies');\n prePruneDepCount = countTotalDependenciesInTree(depTree);\n analytics.add('prePruneDepCount', prePruneDepCount);\n debug('total dependencies: %d', prePruneDepCount);\n debug('pruning dep tree');\n depTree = await pruneTree(depTree, meta.packageManager);\n debug('finished pruning dep tree');\n }\n if (['npm', 'yarn'].includes(meta.packageManager)) {\n const { filteredDepTree, missingDeps } = filterOutMissingDeps(depTree);\n depTree = filteredDepTree;\n treeMissingDeps = missingDeps;\n }\n\n let targetFileDir;\n\n if (targetFileRelativePath) {\n const { dir } = path.parse(targetFileRelativePath);\n targetFileDir = dir;\n }\n\n const policy = await findAndLoadPolicy(\n root,\n meta.isDocker ? 'docker' : packageManager!,\n options,\n depTree,\n targetFileDir,\n );\n\n const target = await projectMetadata.getInfo(scannedProject, meta, depTree);\n\n if (isGitTarget(target) && target.branch) {\n analytics.add('targetBranch', target.branch);\n }\n\n depTree = dropEmptyDeps(depTree);\n\n let callGraphPayload;\n if (\n options.reachableVulns &&\n (scannedProject.callGraph as CallGraphError)?.innerError\n ) {\n const err = scannedProject.callGraph as CallGraphError;\n analytics.add(\n 'callGraphError',\n abridgeErrorMessage(\n err.innerError.toString(),\n ANALYTICS_PAYLOAD_MAX_LENGTH,\n ),\n );\n alerts.registerAlerts([\n {\n type: 'error',\n name: 'missing-call-graph',\n msg: err.message,\n },\n ]);\n } else if (scannedProject.callGraph) {\n const { callGraph, nodeCount, edgeCount } = serializeCallGraphWithMetrics(\n scannedProject.callGraph as CallGraph,\n );\n debug(\n `Adding call graph to payload, node count: ${nodeCount}, edge count: ${edgeCount}`,\n );\n\n const callGraphMetrics = get(pluginMeta, 'meta.callGraphMetrics', {});\n analytics.add('callGraphMetrics', {\n callGraphEdgeCount: edgeCount,\n callGraphNodeCount: nodeCount,\n ...callGraphMetrics,\n });\n callGraphPayload = callGraph;\n }\n\n if (!depTree) {\n debug(\n 'scannedProject is missing depGraph or depTree, cannot run test/monitor',\n );\n throw new FailedToRunTestError(\n errorMessageWithRetry('Your monitor request could not be completed.'),\n );\n }\n\n const { res, body } = await makeRequest({\n body: {\n meta: {\n method: meta.method,\n hostname: os.hostname(),\n id: snyk.id || depTree.name,\n ci: isCI(),\n pid: process.pid,\n node: process.version,\n master: snyk.config.isMaster,\n name: getNameDepTree(scannedProject, depTree, meta),\n version: depTree.version,\n org: config.org ? decodeURIComponent(config.org) : undefined,\n pluginName: pluginMeta.name,\n pluginRuntime: pluginMeta.runtime,\n missingDeps: treeMissingDeps,\n dockerImageId: pluginMeta.dockerImageId,\n dockerBaseImage: depTree.docker ? depTree.docker.baseImage : undefined,\n dockerfileLayers: depTree.docker\n ? depTree.docker.dockerfileLayers\n : undefined,\n projectName: getProjectName(scannedProject, meta),\n prePruneDepCount, // undefined unless 'prune' is used,\n monitorGraph: false,\n versionBuildInfo: JSON.stringify(scannedProject.meta?.versionBuildInfo),\n gradleProjectName: scannedProject.meta?.gradleProjectName,\n platform: scannedProject.meta?.platform,\n },\n policy: policy ? policy.toString() : undefined,\n package: depTree,\n callGraph: callGraphPayload,\n // we take the targetFile from the plugin,\n // because we want to send it only for specific package-managers\n target,\n // WARNING: be careful changing this as it affects project uniqueness\n targetFile: getTargetFile(scannedProject, pluginMeta),\n targetFileRelativePath,\n targetReference: meta.targetReference,\n contributors,\n projectAttributes,\n tags,\n } as MonitorBody,\n gzip: true,\n method: 'PUT',\n headers: {\n authorization: getAuthHeader(),\n 'content-encoding': 'gzip',\n },\n url: config.API + '/monitor/' + packageManager,\n json: true,\n });\n\n if (res.statusCode && res.statusCode >= 200 && res.statusCode <= 299) {\n return body as MonitorResult;\n } else {\n const userMessage = body && body.userMessage;\n if (!userMessage && res.statusCode === 504) {\n throw new ConnectionTimeoutError();\n } else {\n throw new MonitorError(res.statusCode, userMessage);\n }\n }\n}\n\nexport async function monitorDepGraph(\n root: string,\n meta: MonitorMeta,\n scannedProject: ScannedProject,\n pluginMeta: PluginMetadata,\n options: MonitorOptions & PolicyOptions,\n targetFileRelativePath?: string,\n contributors?: Contributor[],\n projectAttributes?: ProjectAttributes,\n tags?: Tag[],\n): Promise<MonitorResult> {\n const packageManager = meta.packageManager;\n analytics.add('monitorDepGraph', true);\n\n let depGraph = scannedProject.depGraph;\n\n if (!depGraph) {\n debug(\n 'scannedProject is missing depGraph or depTree, cannot run test/monitor',\n );\n throw new FailedToRunTestError(\n 'Your monitor request could not be completed. ',\n );\n }\n\n let targetFileDir;\n\n if (targetFileRelativePath) {\n const { dir } = path.parse(targetFileRelativePath);\n targetFileDir = dir;\n }\n\n const policy = await findAndLoadPolicy(\n root,\n meta.isDocker ? 'docker' : packageManager!,\n options,\n undefined,\n targetFileDir,\n );\n\n const target = await projectMetadata.getInfo(scannedProject, meta);\n if (isGitTarget(target) && target.branch) {\n analytics.add('targetBranch', target.branch);\n }\n\n const pruneIsRequired = options.pruneRepeatedSubdependencies;\n depGraph = await pruneGraph(depGraph, packageManager, pruneIsRequired);\n\n let callGraphPayload;\n if (\n options.reachableVulns &&\n (scannedProject.callGraph as CallGraphError)?.innerError\n ) {\n const err = scannedProject.callGraph as CallGraphError;\n analytics.add(\n 'callGraphError',\n abridgeErrorMessage(\n err.innerError.toString(),\n ANALYTICS_PAYLOAD_MAX_LENGTH,\n ),\n );\n alerts.registerAlerts([\n {\n type: 'error',\n name: 'missing-call-graph',\n msg: err.message,\n },\n ]);\n } else if (scannedProject.callGraph) {\n const { callGraph, nodeCount, edgeCount } = serializeCallGraphWithMetrics(\n scannedProject.callGraph as CallGraph,\n );\n debug(\n `Adding call graph to payload, node count: ${nodeCount}, edge count: ${edgeCount}`,\n );\n\n const callGraphMetrics = get(pluginMeta, 'meta.callGraphMetrics', {});\n analytics.add('callGraphMetrics', {\n callGraphEdgeCount: edgeCount,\n callGraphNodeCount: nodeCount,\n ...callGraphMetrics,\n });\n callGraphPayload = callGraph;\n }\n\n if (!depGraph) {\n debug(\n 'scannedProject is missing depGraph or depTree, cannot run test/monitor',\n );\n throw new FailedToRunTestError(\n errorMessageWithRetry('Your monitor request could not be completed.'),\n );\n }\n\n const { res, body } = await makeRequest({\n body: {\n meta: {\n method: meta.method,\n hostname: os.hostname(),\n id: snyk.id || depGraph.rootPkg.name,\n ci: isCI(),\n pid: process.pid,\n node: process.version,\n master: snyk.config.isMaster,\n name: getNameDepGraph(scannedProject, depGraph, meta),\n version: depGraph.rootPkg.version,\n org: config.org ? decodeURIComponent(config.org) : undefined,\n pluginName: pluginMeta.name,\n pluginRuntime: pluginMeta.runtime,\n projectName: getProjectName(scannedProject, meta),\n monitorGraph: true,\n versionBuildInfo: JSON.stringify(scannedProject.meta?.versionBuildInfo),\n gradleProjectName: scannedProject.meta?.gradleProjectName,\n },\n policy: policy ? policy.toString() : undefined,\n depGraphJSON: depGraph, // depGraph will be auto serialized to JSON on send\n // we take the targetFile from the plugin,\n // because we want to send it only for specific package-managers\n target,\n targetFile: getTargetFile(scannedProject, pluginMeta),\n targetFileRelativePath,\n targetReference: meta.targetReference,\n contributors,\n callGraph: callGraphPayload,\n projectAttributes,\n tags,\n } as MonitorBody,\n gzip: true,\n method: 'PUT',\n headers: {\n authorization: getAuthHeader(),\n 'content-encoding': 'gzip',\n },\n url: `${config.API}/monitor/${packageManager}/graph`,\n json: true,\n });\n\n if (res.statusCode && res.statusCode >= 200 && res.statusCode <= 299) {\n return body as MonitorResult;\n } else {\n const userMessage = body && body.userMessage;\n if (!userMessage && res.statusCode === 504) {\n throw new ConnectionTimeoutError();\n } else {\n throw new MonitorError(res.statusCode, userMessage);\n }\n }\n}\n\nasync function monitorDepGraphFromDepTree(\n root: string,\n meta: MonitorMeta,\n scannedProject: ScannedProject,\n pluginMeta: PluginMetadata,\n options: MonitorOptions & PolicyOptions,\n targetFileRelativePath?: string,\n contributors?: Contributor[],\n projectAttributes?: ProjectAttributes,\n tags?: Tag[],\n): Promise<MonitorResult> {\n const packageManager = meta.packageManager;\n\n let treeMissingDeps: string[] | undefined;\n let depTree = scannedProject.depTree;\n\n if (!depTree) {\n debug(\n 'scannedProject is missing depGraph or depTree, cannot run test/monitor',\n );\n throw new FailedToRunTestError(\n errorMessageWithRetry('Your monitor request could not be completed'),\n );\n }\n\n let targetFileDir;\n\n if (targetFileRelativePath) {\n const { dir } = path.parse(targetFileRelativePath);\n targetFileDir = dir;\n }\n\n const policy = await findAndLoadPolicy(\n root,\n meta.isDocker ? 'docker' : packageManager!,\n options,\n // TODO: fix this and send only send when we used resolve-deps for node\n // it should be a ExpandedPkgTree type instead\n depTree,\n targetFileDir,\n );\n\n if (['npm', 'yarn'].includes(meta.packageManager)) {\n const { filteredDepTree, missingDeps } = filterOutMissingDeps(depTree);\n depTree = filteredDepTree;\n treeMissingDeps = missingDeps;\n }\n\n const depGraph: depGraphLib.DepGraph = await depGraphLib.legacy.depTreeToGraph(\n depTree,\n packageManager,\n );\n const target = await projectMetadata.getInfo(scannedProject, meta, depTree);\n\n if (isGitTarget(target) && target.branch) {\n analytics.add('targetBranch', target.branch);\n }\n\n let prunedGraph = depGraph;\n let prePruneDepCount;\n if (meta.prune) {\n debug('Trying to prune the graph');\n prePruneDepCount = countPathsToGraphRoot(depGraph);\n debug('pre prunedPathsCount: ' + prePruneDepCount);\n prunedGraph = await pruneGraph(depGraph, packageManager, meta.prune);\n }\n\n if (!depTree) {\n debug(\n 'scannedProject is missing depGraph or depTree, cannot run test/monitor',\n );\n throw new FailedToRunTestError(\n errorMessageWithRetry('Your monitor request could not be completed.'),\n );\n }\n const { res, body } = await makeRequest({\n body: {\n meta: {\n method: meta.method,\n hostname: os.hostname(),\n id: snyk.id || depTree.name,\n ci: isCI(),\n pid: process.pid,\n node: process.version,\n master: snyk.config.isMaster,\n name: getNameDepGraph(scannedProject, depGraph, meta),\n version: depGraph.rootPkg.version,\n org: config.org ? decodeURIComponent(config.org) : undefined,\n pluginName: pluginMeta.name,\n pluginRuntime: pluginMeta.runtime,\n dockerImageId: pluginMeta.dockerImageId,\n dockerBaseImage: depTree.docker ? depTree.docker.baseImage : undefined,\n dockerfileLayers: depTree.docker\n ? depTree.docker.dockerfileLayers\n : undefined,\n projectName: getProjectName(scannedProject, meta),\n prePruneDepCount, // undefined unless 'prune' is used\n missingDeps: treeMissingDeps,\n monitorGraph: true,\n },\n policy: policy ? policy.toString() : undefined,\n depGraphJSON: prunedGraph, // depGraph will be auto serialized to JSON on send\n // we take the targetFile from the plugin,\n // because we want to send it only for specific package-managers\n target,\n targetFile: getTargetFile(scannedProject, pluginMeta),\n targetFileRelativePath,\n targetReference: meta.targetReference,\n contributors,\n projectAttributes,\n tags,\n } as MonitorBody,\n gzip: true,\n method: 'PUT',\n headers: {\n authorization: getAuthHeader(),\n 'content-encoding': 'gzip',\n },\n url: `${config.API}/monitor/${packageManager}/graph`,\n json: true,\n });\n\n if (res.statusCode && res.statusCode >= 200 && res.statusCode <= 299) {\n return body as MonitorResult;\n } else {\n const userMessage = body && body.userMessage;\n if (!userMessage && res.statusCode === 504) {\n throw new ConnectionTimeoutError();\n } else {\n throw new MonitorError(res.statusCode, userMessage);\n }\n }\n}\n","import * as depGraphLib from '@snyk/dep-graph';\nimport { DepTree } from '../types';\n\nexport async function pruneTree(\n tree: DepTree,\n packageManagerName: string,\n): Promise<DepTree> {\n // Pruning requires conversion to the graph first.\n // This is slow.\n const graph = await depGraphLib.legacy.depTreeToGraph(\n tree,\n packageManagerName,\n );\n const prunedTree: DepTree = (await depGraphLib.legacy.graphToDepTree(\n graph,\n packageManagerName,\n { deduplicateWithinTopLevelDeps: true },\n )) as DepTree;\n // Transplant pruned dependencies in the original tree (we want to keep all other fields):\n tree.dependencies = prunedTree.dependencies;\n return tree;\n}\n","import { ScannedProject, DepTree } from '@snyk/cli-interface/legacy/common';\nimport {\n getContainerTargetFile,\n getContainerProjectName,\n getContainerName,\n isContainer,\n} from '../container';\nimport * as depGraphLib from '@snyk/dep-graph';\nimport { MonitorMeta } from '../types';\nimport { PluginMetadata } from '@snyk/cli-interface/legacy/plugin';\n\nexport function getNameDepTree(\n scannedProject: ScannedProject,\n depTree: DepTree,\n meta: MonitorMeta,\n): string | undefined {\n if (isContainer(scannedProject)) {\n return getContainerName(scannedProject, meta);\n }\n return depTree.name;\n}\n\nexport function getNameDepGraph(\n scannedProject: ScannedProject,\n depGraph: depGraphLib.DepGraph,\n meta: MonitorMeta,\n): string | undefined {\n if (isContainer(scannedProject)) {\n return getContainerName(scannedProject, meta);\n }\n return depGraph.rootPkg?.name;\n}\n\nexport function getProjectName(\n scannedProject: ScannedProject,\n meta: MonitorMeta,\n): string | undefined {\n if (isContainer(scannedProject)) {\n return getContainerProjectName(scannedProject, meta);\n }\n\n if (meta['project-name'] && scannedProject.meta?.projectName) {\n return scannedProject.meta.projectName;\n }\n\n return meta['project-name'];\n}\n\nexport function getTargetFile(\n scannedProject: ScannedProject,\n pluginMeta: PluginMetadata,\n): string | undefined {\n if (isContainer(scannedProject)) {\n return getContainerTargetFile(scannedProject);\n }\n return pluginMeta.targetFile;\n}\n","import { MonitorOptions, Options, TestOptions } from './types';\nimport config from './config';\nimport { SupportedPackageManagers } from './package-managers';\nimport * as reachableVulns from './reachable-vulns';\nimport { isMultiProjectScan } from './is-multi-project-scan';\nimport { FeatureNotSupportedByPackageManagerError } from './errors';\nimport * as alerts from './alerts';\n\nexport async function validateOptions(\n options: (Options & TestOptions) | (Options & MonitorOptions),\n packageManager?: SupportedPackageManagers,\n): Promise<void> {\n if (options.reachableVulns) {\n // Throwing error only in case when both packageManager and allProjects not defined\n if (!packageManager && !isMultiProjectScan(options)) {\n throw new Error('Could not determine package manager');\n }\n const org = options.org || config.org;\n\n try {\n await reachableVulns.validatePayload(org, options, packageManager);\n } catch (err) {\n if (\n err instanceof FeatureNotSupportedByPackageManagerError &&\n err.feature === 'Reachable vulns' &&\n err.userMessage\n ) {\n alerts.registerAlerts([\n {\n type: 'error',\n name: 'pkgman-not-supported',\n msg: err.userMessage,\n },\n ]);\n } else {\n throw err;\n }\n }\n }\n}\n","import { legacyPlugin as pluginApi } from '@snyk/cli-interface';\nimport { MultiProjectResultCustom } from './get-multi-plugin-result';\nimport { convertScannedProjectsToCustom } from './convert-scanned-projects-to-custom';\nimport { SupportedPackageManagers } from '../package-managers';\n\nexport function convertMultiResultToMultiCustom(\n inspectRes: pluginApi.MultiProjectResult,\n packageManager?: SupportedPackageManagers,\n targetFile?: string,\n): MultiProjectResultCustom {\n // convert all results from the same plugin to MultiProjectResultCustom\n // and annotate each scannedProject with packageManager\n return {\n plugin: inspectRes.plugin,\n scannedProjects: convertScannedProjectsToCustom(\n inspectRes.scannedProjects,\n inspectRes.plugin,\n (inspectRes.plugin.packageManager as SupportedPackageManagers) ||\n packageManager,\n targetFile,\n ),\n };\n}\n","import * as cliInterface from '@snyk/cli-interface';\nimport { ScannedProjectCustom } from './get-multi-plugin-result';\nimport { SupportedPackageManagers } from '../package-managers';\nimport { PluginMetadata } from '@snyk/cli-interface/legacy/plugin';\n\nexport function convertScannedProjectsToCustom(\n scannedProjects: cliInterface.legacyCommon.ScannedProject[],\n pluginMeta: PluginMetadata,\n packageManager?: SupportedPackageManagers,\n targetFile?: string,\n): ScannedProjectCustom[] {\n // annotate the package manager & targetFile to be used\n // for test & monitor\n return scannedProjects.map((a) => {\n (a as ScannedProjectCustom).plugin =\n (a as ScannedProjectCustom).plugin || pluginMeta;\n (a as ScannedProjectCustom).targetFile = a.targetFile || targetFile;\n (a as ScannedProjectCustom).packageManager = (a as ScannedProjectCustom)\n .packageManager\n ? (a as ScannedProjectCustom).packageManager\n : (packageManager as SupportedPackageManagers);\n (a as ScannedProjectCustom).meta = a.meta;\n return a as ScannedProjectCustom;\n });\n}\n","import { legacyPlugin as pluginApi } from '@snyk/cli-interface';\nimport { MultiProjectResultCustom } from './get-multi-plugin-result';\nimport { SupportedPackageManagers } from '../package-managers';\nimport { CallGraph } from '@snyk/cli-interface/legacy/common';\n\nexport function convertSingleResultToMultiCustom(\n inspectRes: pluginApi.SinglePackageResult,\n packageManager?: SupportedPackageManagers,\n): MultiProjectResultCustom {\n if (!packageManager) {\n packageManager = inspectRes.plugin\n .packageManager as SupportedPackageManagers;\n }\n if (inspectRes.dependencyGraph) {\n return convertDepGraphResult(inspectRes, packageManager);\n } else {\n return convertDepTreeResult(inspectRes, packageManager);\n }\n}\n\nfunction convertDepGraphResult(\n inspectRes: pluginApi.SinglePackageResult,\n packageManager: SupportedPackageManagers,\n): MultiProjectResultCustom {\n const { plugin, meta, dependencyGraph: depGraph, callGraph } = inspectRes;\n return {\n plugin,\n scannedProjects: [\n {\n plugin: plugin as any,\n depGraph,\n callGraph: callGraph as CallGraph,\n meta,\n targetFile: plugin.targetFile,\n packageManager,\n },\n ],\n };\n}\n\n/**\n * @deprecated @boost: delete me when all languages uses depGraph\n */\nfunction convertDepTreeResult(\n inspectRes: pluginApi.SinglePackageResult,\n packageManager: SupportedPackageManagers,\n): MultiProjectResultCustom {\n if (\n inspectRes.package &&\n !inspectRes.package.targetFile &&\n inspectRes.plugin\n ) {\n inspectRes.package.targetFile = inspectRes.plugin.targetFile;\n }\n const { plugin, meta, package: depTree, callGraph } = inspectRes;\n\n if (depTree && !depTree.targetFile && plugin) {\n depTree.targetFile = plugin.targetFile;\n }\n\n return {\n plugin,\n scannedProjects: [\n {\n plugin: plugin as any,\n depTree,\n callGraph: callGraph as CallGraph,\n meta,\n targetFile: plugin.targetFile,\n packageManager,\n },\n ],\n };\n}\n","import * as cliInterface from '@snyk/cli-interface';\nimport { ScannedProjectCustom } from './get-multi-plugin-result';\nimport { SupportedPackageManagers } from '../package-managers';\n\nexport function extractPackageManager(\n scannedProject: ScannedProjectCustom,\n pluginRes: cliInterface.legacyPlugin.MultiProjectResult,\n options: {\n packageManager?: SupportedPackageManagers;\n },\n): SupportedPackageManagers | undefined {\n // try and use the package Manager from the plugin\n // result if present\n const packageManager =\n scannedProject.packageManager ||\n (pluginRes.plugin && pluginRes.plugin.packageManager);\n\n if (packageManager) {\n return packageManager;\n }\n\n if (!packageManager && options.packageManager) {\n // fallback to Options packageManager\n return options.packageManager;\n }\n\n // for example: docker\n return undefined;\n}\n","import * as debugModule from 'debug';\nimport * as pathLib from 'path';\nimport chalk from 'chalk';\nimport { icon } from '../theme';\nimport { legacyPlugin as pluginApi } from '@snyk/cli-interface';\nimport { find } from '../find-files';\nimport { Options, TestOptions, MonitorOptions } from '../types';\nimport { NoSupportedManifestsFoundError } from '../errors';\nimport {\n getMultiPluginResult,\n MultiProjectResultCustom,\n} from './get-multi-plugin-result';\nimport { getSinglePluginResult } from './get-single-plugin-result';\nimport {\n detectPackageFile,\n AUTO_DETECTABLE_FILES,\n detectPackageManagerFromFile,\n} from '../detect';\nimport analytics = require('../analytics');\nimport { convertSingleResultToMultiCustom } from './convert-single-splugin-res-to-multi-custom';\nimport { convertMultiResultToMultiCustom } from './convert-multi-plugin-res-to-multi-custom';\nimport { processYarnWorkspaces } from './nodejs-plugin/yarn-workspaces-parser';\nimport { ScannedProject } from '@snyk/cli-interface/legacy/common';\n\nconst debug = debugModule('snyk-test');\n\nconst multiProjectProcessors = {\n yarnWorkspaces: {\n handler: processYarnWorkspaces,\n files: ['package.json'],\n },\n allProjects: {\n handler: getMultiPluginResult,\n files: AUTO_DETECTABLE_FILES,\n },\n};\n\n// Force getDepsFromPlugin to return scannedProjects for processing\nexport async function getDepsFromPlugin(\n root: string,\n options: Options & (TestOptions | MonitorOptions),\n): Promise<pluginApi.MultiProjectResult | MultiProjectResultCustom> {\n let inspectRes: pluginApi.InspectResult;\n\n if (Object.keys(multiProjectProcessors).some((key) => options[key])) {\n const scanType = options.yarnWorkspaces ? 'yarnWorkspaces' : 'allProjects';\n const levelsDeep = options.detectionDepth;\n const ignore = options.exclude ? options.exclude.split(',') : [];\n const { files: targetFiles, allFilesFound } = await find(\n root,\n ignore,\n multiProjectProcessors[scanType].files,\n levelsDeep,\n );\n debug(\n `auto detect manifest files, found ${targetFiles.length}`,\n targetFiles,\n );\n if (targetFiles.length === 0) {\n throw NoSupportedManifestsFoundError([root]);\n }\n // enable full sub-project scan for gradle\n options.allSubProjects = true;\n inspectRes = await multiProjectProcessors[scanType].handler(\n root,\n options,\n targetFiles,\n );\n const scannedProjects = inspectRes.scannedProjects;\n const analyticData = {\n scannedProjects: scannedProjects.length,\n targetFiles,\n packageManagers: targetFiles.map((file) =>\n detectPackageManagerFromFile(file),\n ),\n levelsDeep,\n ignore,\n };\n analytics.add(scanType, analyticData);\n debug(\n `Found ${scannedProjects.length} projects from ${allFilesFound.length} detected manifests`,\n );\n const userWarningMessage = warnSomeGradleManifestsNotScanned(\n scannedProjects,\n allFilesFound,\n root,\n );\n\n if (!options.json && !options.quiet && userWarningMessage) {\n console.warn(chalk.bold.red(userWarningMessage));\n }\n return inspectRes;\n }\n\n // TODO: is this needed for the auto detect handling above?\n // don't override options.file if scanning multiple files at once\n if (!options.scanAllUnmanaged) {\n options.file = options.file || detectPackageFile(root);\n }\n if (!options.docker && !(options.file || options.packageManager)) {\n throw NoSupportedManifestsFoundError([...root]);\n }\n inspectRes = await getSinglePluginResult(root, options);\n\n if (!pluginApi.isMultiResult(inspectRes)) {\n if (!inspectRes.package && !inspectRes.dependencyGraph) {\n // something went wrong if both are not present...\n throw Error(\n `error getting dependencies from ${\n options.docker ? 'docker' : options.packageManager\n } ` + \"plugin: neither 'package' nor 'scannedProjects' were found\",\n );\n }\n\n return convertSingleResultToMultiCustom(inspectRes, options.packageManager);\n }\n // We are using \"options\" to store some information returned from plugin that we need to use later,\n // but don't want to send to Registry in the Payload.\n // TODO(kyegupov): decouple inspect and payload so that we don't need this hack\n (options as any).projectNames = inspectRes.scannedProjects.map(\n (scannedProject) => scannedProject?.depTree?.name,\n );\n return convertMultiResultToMultiCustom(inspectRes, options.packageManager);\n}\n\nexport function warnSomeGradleManifestsNotScanned(\n scannedProjects: ScannedProject[],\n allFilesFound: string[],\n root: string,\n): string | null {\n const gradleTargetFilesFilter = (targetFile) =>\n targetFile &&\n (targetFile.endsWith('build.gradle') ||\n targetFile.endsWith('build.gradle.kts'));\n const scannedGradleFiles = scannedProjects\n .map((p) => {\n const targetFile = p.meta?.targetFile || p.targetFile;\n return targetFile ? pathLib.resolve(root, targetFile) : null;\n })\n .filter(gradleTargetFilesFilter);\n const detectedGradleFiles = allFilesFound.filter(gradleTargetFilesFilter);\n const diff = detectedGradleFiles.filter(\n (file) => !scannedGradleFiles.includes(file),\n );\n\n if (diff.length > 0) {\n debug(\n `These Gradle manifests did not return any dependency results:\\n${diff.join(\n ',\\n',\n )}`,\n );\n return `${icon.ISSUE} ${diff.length}/${detectedGradleFiles.length} detected Gradle manifests did not return dependencies. They may have errored or were not included as part of a multi-project build. You may need to scan them individually with --file=path/to/file. Run with \\`-d\\` for more info.`;\n }\n return null;\n}\n","import { legacyPlugin as pluginApi } from '@snyk/cli-interface';\nimport { find } from '../find-files';\nimport { AUTO_DETECTABLE_FILES } from '../detect';\nimport { Options } from '../types';\n\nexport async function getExtraProjectCount(\n root: string,\n options: Options,\n inspectResult: pluginApi.InspectResult,\n): Promise<number | undefined> {\n if (options.docker || options.unmanaged) {\n return undefined;\n }\n if (\n inspectResult.plugin.meta &&\n inspectResult.plugin.meta.allSubProjectNames &&\n inspectResult.plugin.meta.allSubProjectNames.length > 0\n ) {\n return inspectResult.plugin.meta.allSubProjectNames.length;\n }\n try {\n const { files: extraTargetFiles } = await find(\n root,\n [],\n AUTO_DETECTABLE_FILES,\n );\n const foundProjectsCount =\n extraTargetFiles.length > 1 ? extraTargetFiles.length - 1 : undefined;\n return foundProjectsCount;\n } catch (e) {\n return undefined;\n }\n}\n","import * as cloneDeep from 'lodash.clonedeep';\nimport * as pathLib from 'path';\nimport * as cliInterface from '@snyk/cli-interface';\nimport chalk from 'chalk';\nimport { icon } from '../theme';\nimport * as debugModule from 'debug';\n\nimport { TestOptions, Options, MonitorOptions } from '../types';\nimport { detectPackageManagerFromFile } from '../detect';\nimport { SupportedPackageManagers } from '../package-managers';\nimport { getSinglePluginResult } from './get-single-plugin-result';\nimport { convertSingleResultToMultiCustom } from './convert-single-splugin-res-to-multi-custom';\nimport { convertMultiResultToMultiCustom } from './convert-multi-plugin-res-to-multi-custom';\nimport { PluginMetadata } from '@snyk/cli-interface/legacy/plugin';\nimport { CallGraph } from '@snyk/cli-interface/legacy/common';\nimport { errorMessageWithRetry, FailedToRunTestError } from '../errors';\nimport { processYarnWorkspaces } from './nodejs-plugin/yarn-workspaces-parser';\n\nconst debug = debugModule('snyk-test');\nexport interface ScannedProjectCustom\n extends cliInterface.legacyCommon.ScannedProject {\n packageManager: SupportedPackageManagers;\n plugin: PluginMetadata;\n callGraph?: CallGraph;\n}\n\ninterface FailedProjectScanError {\n targetFile?: string;\n error?: Error;\n errMessage: string;\n}\nexport interface MultiProjectResultCustom\n extends cliInterface.legacyPlugin.MultiProjectResult {\n scannedProjects: ScannedProjectCustom[];\n failedResults?: FailedProjectScanError[];\n}\n\nexport async function getMultiPluginResult(\n root: string,\n options: Options & (TestOptions | MonitorOptions),\n targetFiles: string[],\n): Promise<MultiProjectResultCustom> {\n const allResults: ScannedProjectCustom[] = [];\n const failedResults: FailedProjectScanError[] = [];\n\n // process any yarn workspaces first\n // the files need to be proceeded together as they provide context to each other\n const {\n scannedProjects,\n unprocessedFiles,\n } = await processYarnWorkspacesProjects(root, options, targetFiles);\n allResults.push(...scannedProjects);\n debug(`Not part of a workspace: ${unprocessedFiles.join(', ')}}`);\n // process the rest 1 by 1 sent to relevant plugins\n for (const targetFile of unprocessedFiles) {\n const optionsClone = cloneDeep(options);\n optionsClone.file = pathLib.relative(root, targetFile);\n optionsClone.packageManager = detectPackageManagerFromFile(\n pathLib.basename(targetFile),\n );\n try {\n const inspectRes = await getSinglePluginResult(\n root,\n optionsClone,\n optionsClone.file,\n );\n let resultWithScannedProjects: cliInterface.legacyPlugin.MultiProjectResult;\n\n if (!cliInterface.legacyPlugin.isMultiResult(inspectRes)) {\n resultWithScannedProjects = convertSingleResultToMultiCustom(\n inspectRes,\n optionsClone.packageManager,\n );\n } else {\n resultWithScannedProjects = inspectRes;\n }\n\n const pluginResultWithCustomScannedProjects = convertMultiResultToMultiCustom(\n resultWithScannedProjects,\n optionsClone.packageManager,\n optionsClone.file,\n );\n // annotate the package manager, project name & targetFile to be used\n // for test & monitor\n // TODO: refactor how we display meta to not have to do this\n (options as any).projectNames = resultWithScannedProjects.scannedProjects.map(\n (scannedProject) => scannedProject?.depTree?.name,\n );\n\n allResults.push(...pluginResultWithCustomScannedProjects.scannedProjects);\n } catch (error) {\n const errMessage =\n error.message ?? 'Something went wrong getting dependencies';\n // TODO: propagate this all the way back and include in --json output\n failedResults.push({\n targetFile,\n error,\n errMessage: errMessage,\n });\n debug(\n chalk.bold.red(\n `\\n${icon.ISSUE} Failed to get dependencies for ${targetFile}\\nERROR: ${errMessage}\\n`,\n ),\n );\n }\n }\n\n if (!allResults.length) {\n throw new FailedToRunTestError(\n errorMessageWithRetry(\n `Failed to get dependencies for all ${targetFiles.length} potential projects.`,\n ),\n );\n }\n\n return {\n plugin: {\n name: 'custom-auto-detect',\n },\n scannedProjects: allResults,\n failedResults,\n };\n}\n\nasync function processYarnWorkspacesProjects(\n root: string,\n options: Options & (TestOptions | MonitorOptions),\n targetFiles: string[],\n): Promise<{\n scannedProjects: ScannedProjectCustom[];\n unprocessedFiles: string[];\n}> {\n try {\n const { scannedProjects } = await processYarnWorkspaces(\n root,\n {\n strictOutOfSync: options.strictOutOfSync,\n dev: options.dev,\n },\n targetFiles,\n );\n\n const unprocessedFiles = filterOutProcessedWorkspaces(\n root,\n scannedProjects,\n targetFiles,\n );\n return { scannedProjects, unprocessedFiles };\n } catch (e) {\n debug('Error during detecting or processing Yarn Workspaces: ', e);\n return { scannedProjects: [], unprocessedFiles: targetFiles };\n }\n}\n\nexport function filterOutProcessedWorkspaces(\n root: string,\n scannedProjects: ScannedProjectCustom[],\n allTargetFiles: string[],\n): string[] {\n const targetFiles: string[] = [];\n\n const scanned = scannedProjects\n .map((p) => p.targetFile!)\n .map((p) => pathLib.resolve(process.cwd(), root, p));\n const all = allTargetFiles.map((p) => ({\n path: pathLib.resolve(process.cwd(), root, p),\n original: p,\n }));\n\n for (const entry of all) {\n const { path, original } = entry;\n const { base } = pathLib.parse(path);\n\n if (!['package.json', 'yarn.lock'].includes(base)) {\n targetFiles.push(original);\n continue;\n }\n // standardise to package.json\n // we discover the lockfiles but targetFile is package.json\n if (!scanned.includes(path.replace('yarn.lock', 'package.json'))) {\n targetFiles.push(original);\n continue;\n }\n }\n return targetFiles;\n}\n","import plugins = require('.');\nimport { ModuleInfo } from '../module-info';\nimport { legacyPlugin as pluginApi } from '@snyk/cli-interface';\nimport { TestOptions, Options, MonitorOptions } from '../types';\n\nexport async function getSinglePluginResult(\n root: string,\n options: Options & (TestOptions | MonitorOptions),\n targetFile?: string,\n): Promise<pluginApi.InspectResult> {\n const plugin = plugins.loadPlugin(options.packageManager);\n const moduleInfo = ModuleInfo(plugin, options.policy);\n const inspectRes: pluginApi.InspectResult = await moduleInfo.inspect(\n root,\n targetFile || options.file,\n { ...options },\n );\n return inspectRes;\n}\n","import * as rubygemsPlugin from './rubygems';\nimport * as mvnPlugin from 'snyk-mvn-plugin';\nimport * as gradlePlugin from 'snyk-gradle-plugin';\nimport * as sbtPlugin from 'snyk-sbt-plugin';\nimport * as pythonPlugin from 'snyk-python-plugin';\nimport * as goPlugin from 'snyk-go-plugin';\nimport * as nugetPlugin from 'snyk-nuget-plugin';\nimport * as phpPlugin from 'snyk-php-plugin';\nimport * as nodejsPlugin from './nodejs-plugin';\nimport * as cocoapodsPlugin from '@snyk/snyk-cocoapods-plugin';\nimport * as hexPlugin from '@snyk/snyk-hex-plugin';\nimport * as types from './types';\nimport { SupportedPackageManagers } from '../package-managers';\nimport { UnsupportedPackageManagerError } from '../errors';\n\nexport function loadPlugin(\n packageManager: SupportedPackageManagers | undefined,\n): types.Plugin {\n switch (packageManager) {\n case 'npm': {\n return nodejsPlugin;\n }\n case 'rubygems': {\n return rubygemsPlugin;\n }\n case 'maven': {\n return mvnPlugin;\n }\n case 'gradle': {\n return gradlePlugin;\n }\n case 'sbt': {\n return sbtPlugin;\n }\n case 'yarn': {\n return nodejsPlugin;\n }\n case 'pip':\n case 'poetry': {\n return pythonPlugin;\n }\n case 'golangdep':\n case 'gomodules':\n case 'govendor': {\n return goPlugin;\n }\n case 'nuget': {\n return nugetPlugin;\n }\n case 'paket': {\n return nugetPlugin;\n }\n case 'composer': {\n return phpPlugin;\n }\n case 'cocoapods': {\n return cocoapodsPlugin;\n }\n case 'hex': {\n return hexPlugin;\n }\n default: {\n throw new UnsupportedPackageManagerError(packageManager);\n }\n }\n}\n","import * as modulesParser from './npm-modules-parser';\nimport * as lockParser from './npm-lock-parser';\nimport * as types from '../types';\nimport * as analytics from '../../analytics';\nimport { MissingTargetFileError } from '../../errors/missing-targetfile-error';\nimport { MultiProjectResult } from '@snyk/cli-interface/legacy/plugin';\n\nexport async function inspect(\n root: string,\n targetFile: string,\n options: types.Options = {},\n): Promise<MultiProjectResult> {\n if (!targetFile) {\n throw MissingTargetFileError(root);\n }\n const isLockFileBased =\n targetFile.endsWith('package-lock.json') ||\n targetFile.endsWith('yarn.lock');\n\n const getLockFileDeps = isLockFileBased && !options.traverseNodeModules;\n const depTree: any = getLockFileDeps\n ? await lockParser.parse(root, targetFile, options)\n : await modulesParser.parse(root, targetFile, options);\n\n if (depTree?.meta?.lockfileVersion) {\n analytics.add('lockfileVersion', depTree.meta.lockfileVersion);\n }\n\n return {\n plugin: {\n name: 'snyk-nodejs-lockfile-parser',\n runtime: process.version,\n },\n scannedProjects: [{ depTree }],\n };\n}\n","import * as baseDebug from 'debug';\nconst debug = baseDebug('snyk-test');\nimport * as path from 'path';\nimport { spinner } from '../../spinner';\nimport * as analytics from '../../analytics';\nimport * as fs from 'fs';\nimport * as lockFileParser from 'snyk-nodejs-lockfile-parser';\nimport { PkgTree } from 'snyk-nodejs-lockfile-parser';\nimport { Options } from '../types';\n\nexport async function parse(\n root: string,\n targetFile: string,\n options: Options,\n): Promise<PkgTree> {\n const lockFileFullPath = path.resolve(root, targetFile);\n if (!fs.existsSync(lockFileFullPath)) {\n throw new Error(\n 'Lockfile ' + targetFile + ' not found at location: ' + lockFileFullPath,\n );\n }\n\n const fullPath = path.parse(lockFileFullPath);\n const manifestFileFullPath = path.resolve(fullPath.dir, 'package.json');\n const shrinkwrapFullPath = path.resolve(fullPath.dir, 'npm-shrinkwrap.json');\n\n if (!fs.existsSync(manifestFileFullPath)) {\n throw new Error(\n `Could not find package.json at ${manifestFileFullPath} ` +\n `(lockfile found at ${targetFile})`,\n );\n }\n\n if (fs.existsSync(shrinkwrapFullPath)) {\n throw new Error(\n 'Both `npm-shrinkwrap.json` and `package-lock.json` were found in ' +\n fullPath.dir +\n '.\\n' +\n 'Please run your command again specifying `--file=package.json` flag.',\n );\n }\n\n analytics.add('local', true);\n analytics.add('generating-node-dependency-tree', {\n lockFile: true,\n targetFile,\n });\n const resolveModuleSpinnerLabel = `Analyzing npm dependencies for ${lockFileFullPath}`;\n debug(resolveModuleSpinnerLabel);\n try {\n await spinner(resolveModuleSpinnerLabel);\n const strictOutOfSync = options.strictOutOfSync !== false;\n return lockFileParser.buildDepTreeFromFiles(\n root,\n manifestFileFullPath,\n lockFileFullPath,\n options.dev,\n strictOutOfSync,\n );\n } finally {\n await spinner.clear<void>(resolveModuleSpinnerLabel)();\n }\n}\n","import * as path from 'path';\nimport * as fs from 'fs';\nimport * as resolveNodeDeps from 'snyk-resolve-deps';\nimport * as baseDebug from 'debug';\nconst isEmpty = require('lodash.isempty');\nimport { spinner } from '../../spinner';\nimport * as analytics from '../../analytics';\nimport { Options } from '../types';\nimport { getFileContents } from '../../get-file-contents';\n\nconst debug = baseDebug('snyk-nodejs-plugin');\n\nexport async function parse(\n root: string,\n targetFile: string,\n options: Options,\n): Promise<resolveNodeDeps.PackageExpanded> {\n if (targetFile.endsWith('yarn.lock')) {\n options.file =\n options.file && options.file.replace('yarn.lock', 'package.json');\n }\n\n // package-lock.json falls back to package.json (used in wizard code)\n if (targetFile.endsWith('package-lock.json')) {\n options.file =\n options.file && options.file.replace('package-lock.json', 'package.json');\n }\n // check if there any dependencies\n const packageJsonFileName = path.resolve(root, options.file!);\n const packageManager = options.packageManager || 'npm';\n\n try {\n const packageJson = JSON.parse(\n getFileContents(root, packageJsonFileName).content,\n );\n\n let dependencies = packageJson.dependencies;\n if (options.dev) {\n dependencies = { ...dependencies, ...packageJson.devDependencies };\n }\n if (isEmpty(dependencies)) {\n return new Promise((resolve) =>\n resolve({\n name: packageJson.name || 'package.json',\n dependencies: {},\n version: packageJson.version,\n }),\n );\n }\n } catch (e) {\n debug(`Failed to read ${packageJsonFileName}: Error: ${e}`);\n throw new Error(\n `Failed to read ${packageJsonFileName}. Error: ${e.message}`,\n );\n }\n const nodeModulesPath = path.join(\n path.dirname(path.resolve(root, targetFile)),\n 'node_modules',\n );\n\n if (!fs.existsSync(nodeModulesPath)) {\n // throw a custom error\n throw new Error(\n \"Missing node_modules folder: we can't test \" +\n `without dependencies.\\nPlease run '${packageManager} install' first.`,\n );\n }\n analytics.add('local', true);\n analytics.add('generating-node-dependency-tree', {\n lockFile: false,\n targetFile,\n });\n\n const resolveModuleSpinnerLabel =\n 'Analyzing npm dependencies for ' +\n path.dirname(path.resolve(root, targetFile));\n try {\n await spinner.clear<void>(resolveModuleSpinnerLabel)();\n await spinner(resolveModuleSpinnerLabel);\n return resolveNodeDeps(\n root,\n Object.assign({}, options, { noFromArrays: true }),\n );\n } finally {\n await spinner.clear<void>(resolveModuleSpinnerLabel)();\n }\n}\n","import * as baseDebug from 'debug';\nimport * as pathUtil from 'path';\nconst sortBy = require('lodash.sortby');\nconst groupBy = require('lodash.groupby');\nimport * as micromatch from 'micromatch';\n\nconst debug = baseDebug('snyk-yarn-workspaces');\nimport * as lockFileParser from 'snyk-nodejs-lockfile-parser';\nimport {\n MultiProjectResultCustom,\n ScannedProjectCustom,\n} from '../get-multi-plugin-result';\nimport { getFileContents } from '../../get-file-contents';\nimport { NoSupportedManifestsFoundError } from '../../errors';\n\nexport async function processYarnWorkspaces(\n root: string,\n settings: {\n strictOutOfSync?: boolean;\n dev?: boolean;\n yarnWorkspaces?: boolean;\n },\n targetFiles: string[],\n): Promise<MultiProjectResultCustom> {\n // the order of yarnTargetFiles folders is important\n // must have the root level most folders at the top\n const mappedAndFiltered = targetFiles\n .map((p) => ({ path: p, ...pathUtil.parse(p) }))\n .filter((res) => ['package.json', 'yarn.lock'].includes(res.base));\n const sorted = sortBy(mappedAndFiltered, 'dir');\n const grouped = groupBy(sorted, 'dir');\n\n const yarnTargetFiles: {\n [dir: string]: Array<{\n path: string;\n base: string;\n dir: string;\n }>;\n } = grouped;\n\n debug(`Processing potential Yarn workspaces (${targetFiles.length})`);\n if (settings.yarnWorkspaces && Object.keys(yarnTargetFiles).length === 0) {\n throw NoSupportedManifestsFoundError([root]);\n }\n let yarnWorkspacesMap = {};\n const yarnWorkspacesFilesMap = {};\n const result: MultiProjectResultCustom = {\n plugin: {\n name: 'snyk-nodejs-yarn-workspaces',\n runtime: process.version,\n },\n scannedProjects: [],\n };\n let rootWorkspaceManifestContent = {};\n // the folders must be ordered highest first\n for (const directory of Object.keys(yarnTargetFiles)) {\n debug(`Processing ${directory} as a potential Yarn workspace`);\n let isYarnWorkspacePackage = false;\n let isRootPackageJson = false;\n const packageJsonFileName = pathUtil.join(directory, 'package.json');\n const packageJson = getFileContents(root, packageJsonFileName);\n yarnWorkspacesMap = {\n ...yarnWorkspacesMap,\n ...getWorkspacesMap(packageJson),\n };\n for (const workspaceRoot of Object.keys(yarnWorkspacesMap)) {\n const match = packageJsonBelongsToWorkspace(\n packageJsonFileName,\n yarnWorkspacesMap,\n workspaceRoot,\n );\n if (match) {\n debug(`${packageJsonFileName} matches an existing workspace pattern`);\n yarnWorkspacesFilesMap[packageJsonFileName] = {\n root: workspaceRoot,\n };\n isYarnWorkspacePackage = true;\n }\n if (packageJsonFileName === workspaceRoot) {\n isRootPackageJson = true;\n rootWorkspaceManifestContent = JSON.parse(packageJson.content);\n }\n }\n\n if (!(isYarnWorkspacePackage || isRootPackageJson)) {\n debug(\n `${packageJsonFileName} is not part of any detected workspace, skipping`,\n );\n continue;\n }\n try {\n const rootDir = isYarnWorkspacePackage\n ? pathUtil.dirname(yarnWorkspacesFilesMap[packageJsonFileName].root)\n : pathUtil.dirname(packageJsonFileName);\n const rootYarnLockfileName = pathUtil.join(rootDir, 'yarn.lock');\n const yarnLock = await getFileContents(root, rootYarnLockfileName);\n\n if (\n rootWorkspaceManifestContent.hasOwnProperty('resolutions') &&\n lockFileParser.getYarnLockfileType(yarnLock.content) ===\n lockFileParser.LockfileType.yarn2\n ) {\n const parsedManifestContent = JSON.parse(packageJson.content);\n packageJson.content = JSON.stringify({\n ...parsedManifestContent,\n resolutions: rootWorkspaceManifestContent['resolutions'],\n });\n }\n\n const res = await lockFileParser.buildDepTree(\n packageJson.content,\n yarnLock.content,\n settings.dev,\n lockFileParser.LockfileType.yarn,\n settings.strictOutOfSync !== false,\n );\n const project: ScannedProjectCustom = {\n packageManager: 'yarn',\n targetFile: pathUtil.relative(root, packageJson.fileName),\n depTree: res as any,\n plugin: {\n name: 'snyk-nodejs-lockfile-parser',\n runtime: process.version,\n },\n };\n result.scannedProjects.push(project);\n } catch (e) {\n if (settings.yarnWorkspaces) {\n throw e;\n }\n debug(`Error process workspace: ${packageJsonFileName}. ERROR: ${e}`);\n }\n }\n if (!result.scannedProjects.length) {\n debug(\n `No yarn workspaces detected in any of the ${targetFiles.length} target files.`,\n );\n }\n return result;\n}\n\ninterface YarnWorkspacesMap {\n [packageJsonName: string]: {\n workspaces: string[];\n };\n}\n\nexport function getWorkspacesMap(file: {\n content: string;\n fileName: string;\n}): YarnWorkspacesMap {\n const yarnWorkspacesMap = {};\n if (!file) {\n return yarnWorkspacesMap;\n }\n\n try {\n const rootFileWorkspacesDefinitions = lockFileParser.getYarnWorkspaces(\n file.content,\n );\n\n if (rootFileWorkspacesDefinitions && rootFileWorkspacesDefinitions.length) {\n yarnWorkspacesMap[file.fileName] = {\n workspaces: rootFileWorkspacesDefinitions,\n };\n }\n } catch (e) {\n debug('Failed to process a workspace', e.message);\n }\n return yarnWorkspacesMap;\n}\n\nexport function packageJsonBelongsToWorkspace(\n packageJsonFileName: string,\n yarnWorkspacesMap: YarnWorkspacesMap,\n workspaceRoot: string,\n): boolean {\n const workspaceRootFolder = pathUtil.dirname(\n workspaceRoot.replace(/\\\\/g, '/'),\n );\n const workspacesGlobs = (\n yarnWorkspacesMap[workspaceRoot].workspaces || []\n ).map((workspace) => pathUtil.join(workspaceRootFolder, workspace));\n\n const match = micromatch.isMatch(\n packageJsonFileName.replace(/\\\\/g, '/'),\n workspacesGlobs.map((p) =>\n pathUtil.normalize(pathUtil.join(p, '**')).replace(/\\\\/g, '/'),\n ),\n );\n return match;\n}\n","import { inspectors, Spec } from './inspectors';\nimport { MissingTargetFileError } from '../../errors/missing-targetfile-error';\nimport gemfileLockToDependencies = require('./gemfile-lock-to-dependencies');\nimport * as get from 'lodash.get';\nimport { MultiProjectResult } from '@snyk/cli-interface/legacy/plugin';\nimport * as types from '../types';\n\nexport async function inspect(\n root: string,\n targetFile: string,\n options: types.Options = {},\n): Promise<MultiProjectResult> {\n if (!targetFile) {\n throw MissingTargetFileError(root);\n }\n const specs = await gatherSpecs(root, targetFile, options);\n\n return {\n plugin: {\n name: 'bundled:rubygems',\n runtime: 'unknown',\n },\n scannedProjects: [\n {\n depTree: {\n name: specs.packageName,\n targetFile: specs.targetFile,\n dependencies: getDependenciesFromSpecs(specs),\n },\n },\n ],\n };\n}\n\nfunction getDependenciesFromSpecs(specs) {\n const gemfileLockBase64 = get(specs, 'files.gemfileLock.contents');\n const gemspecBase64 = get(specs, 'files.gemspec.contents');\n const contents = Buffer.from(\n gemfileLockBase64 || gemspecBase64,\n 'base64',\n ).toString();\n const dependencies = gemfileLockToDependencies(contents);\n return dependencies;\n}\n\nasync function gatherSpecs(\n root: string,\n targetFile: string,\n options: types.Options,\n): Promise<Spec> {\n for (const inspector of inspectors) {\n if (inspector.canHandle(targetFile)) {\n return await inspector.gatherSpecs(root, targetFile, options);\n }\n }\n\n throw new Error(`Could not handle rubygems file: ${targetFile}`);\n}\n","import * as path from 'path';\nimport { tryGetSpec } from './try-get-spec';\nimport { Spec } from './index';\nimport * as types from '../../types';\n\n/* Supported example patterns:\n * Gemfile\n * Gemfile.lock\n * rails.2.4.5.gemfile\n * rails.2.4.5.gemfile.lock\n * gemfiles/Gemfile.rails-2.4.5.lock\n * gemfiles/Gemfile.lock.rails-2.4.5\n */\n\nconst gemfileOrLockfilePattern = /.*[gG]emfile.*(\\.lock)?.*$/;\nconst gemfileLockPattern = /.*[gG]emfile.*(\\.lock).*$/;\n\nexport function canHandle(file: string): boolean {\n return !!file && gemfileOrLockfilePattern.test(path.basename(file));\n}\n\nexport async function gatherSpecs(\n root: string,\n target: string,\n options: types.Options,\n): Promise<Spec> {\n const { dir, name } = path.parse(target);\n const isGemfileLock = gemfileLockPattern.test(target);\n // if the target is a Gemfile we treat is as the lockfile\n const gemfileLock = await tryGetSpec(\n root,\n isGemfileLock ? target : path.join(target + '.lock'),\n );\n\n if (gemfileLock) {\n const basePackageName = path.basename(root);\n return {\n packageName: options.allSubProjects\n ? path.join(basePackageName, dir)\n : basePackageName,\n targetFile: path.join(dir, name),\n files: { gemfileLock },\n };\n } else {\n throw new Error(\n `Could not read ${target || 'Gemfile.lock'} lockfile: can't test ` +\n 'without dependencies.\\nPlease run `bundle install` first or' +\n ' if this is a custom file name re-run with --file=path/to/custom.gemfile.lock --package-manager=rubygems',\n );\n }\n}\n","import * as path from 'path';\nimport { Files, tryGetSpec } from './try-get-spec';\nimport { Spec } from './index';\n\nconst pattern = /\\.gemspec$/;\n\nexport function canHandle(file: string): boolean {\n return !!file && pattern.test(file);\n}\n\nexport async function gatherSpecs(root: string, target: string): Promise<Spec> {\n const targetName = path.basename(target);\n const targetDir = path.dirname(target);\n const files: Files = {};\n\n const gemspec = await tryGetSpec(root, path.join(targetDir, targetName));\n\n if (gemspec) {\n files.gemspec = gemspec;\n } else {\n throw new Error(`File not found: ${target}`);\n }\n\n const gemfileLock = await tryGetSpec(\n root,\n path.join(targetDir, 'Gemfile.lock'),\n );\n\n if (gemfileLock) {\n files.gemfileLock = gemfileLock;\n }\n\n return {\n packageName: path.basename(root),\n targetFile: path.join(targetDir, targetName),\n files,\n };\n}\n","import * as gemfile from './gemfile';\nimport * as gemspec from './gemspec';\nimport { Files } from './try-get-spec';\n\nexport interface Spec {\n packageName: string;\n targetFile: string;\n files: Files;\n}\n\nexport const inspectors = [gemfile, gemspec];\n","import * as path from 'path';\nimport * as fs from 'fs';\n\ninterface File {\n name: string;\n contents: string;\n}\n\nexport interface Files {\n gemfileLock?: File;\n gemspec?: File;\n}\n\nexport async function tryGetSpec(\n dir: string,\n name: string,\n): Promise<File | null> {\n const filePath = path.resolve(dir, name);\n if (fs.existsSync(filePath)) {\n return {\n name,\n contents: Buffer.from(fs.readFileSync(filePath)).toString('base64'),\n };\n }\n return null;\n}\n","import {\n analyzeFolders,\n AnalysisSeverity,\n MAX_FILE_SIZE,\n} from '@snyk/code-client';\nimport { ReportingDescriptor, Result } from 'sarif';\nimport { SEVERITY } from '../../snyk-test/legacy';\nimport { api } from '../../api-token';\nimport config from '../../config';\nimport { getBase64Encoding } from '../../code-config';\nimport { spinner } from '../../spinner';\nimport { Options } from '../../types';\nimport { SastSettings, Log } from './types';\nimport { analysisProgressUpdate } from './utils';\nimport {\n FeatureNotSupportedBySnykCodeError,\n MissingConfigurationError,\n} from './errors';\nimport { getProxyForUrl } from 'proxy-from-env';\nimport { bootstrap } from 'global-agent';\nimport chalk from 'chalk';\nimport * as debugLib from 'debug';\nimport { getCodeClientProxyUrl } from '../../code-config';\n\nconst debug = debugLib('snyk-code');\n\nexport async function getCodeAnalysisAndParseResults(\n root: string,\n options: Options,\n sastSettings: SastSettings,\n requestId: string,\n): Promise<Log | null> {\n await spinner.clearAll();\n analysisProgressUpdate();\n const codeAnalysis = await getCodeAnalysis(\n root,\n options,\n sastSettings,\n requestId,\n );\n spinner.clearAll();\n return parseSecurityResults(codeAnalysis);\n}\n\nasync function getCodeAnalysis(\n root: string,\n options: Options,\n sastSettings: SastSettings,\n requestId: string,\n): Promise<Log | null> {\n const isLocalCodeEngineEnabled = isLocalCodeEngine(sastSettings);\n if (isLocalCodeEngineEnabled) {\n validateLocalCodeEngineUrl(sastSettings.localCodeEngine.url);\n }\n\n const source = 'snyk-cli';\n const baseURL = isLocalCodeEngineEnabled\n ? sastSettings.localCodeEngine.url\n : getCodeClientProxyUrl();\n\n const base64Encoding = getBase64Encoding();\n debug(`base64 encoding enabled: ${base64Encoding}`);\n\n // TODO(james) This mirrors the implementation in request.ts and we need to use this for deeproxy calls\n // This ensures we support lowercase http(s)_proxy values as well\n // The weird IF around it ensures we don't create an envvar with\n // a value of undefined, which throws error when trying to use it as a proxy\n if (process.env.HTTP_PROXY || process.env.http_proxy) {\n process.env.HTTP_PROXY = process.env.HTTP_PROXY || process.env.http_proxy;\n }\n if (process.env.HTTPS_PROXY || process.env.https_proxy) {\n process.env.HTTPS_PROXY =\n process.env.HTTPS_PROXY || process.env.https_proxy;\n }\n\n const proxyUrl = getProxyForUrl(baseURL);\n if (proxyUrl) {\n bootstrap({\n environmentVariableNamespace: '',\n });\n }\n\n const sessionToken = api() || '';\n\n const severity = options.severityThreshold\n ? severityToAnalysisSeverity(options.severityThreshold)\n : AnalysisSeverity.info;\n const result = await analyzeFolders({\n connection: { baseURL, sessionToken, source, requestId, base64Encoding },\n analysisOptions: { severity },\n fileOptions: { paths: [root] },\n analysisContext: {\n initiator: 'CLI',\n flow: source,\n orgDisplayName: sastSettings.org,\n projectName: config.PROJECT_NAME,\n org: {\n name: sastSettings.org || 'unknown',\n displayName: 'unknown',\n publicId: 'unknown',\n flags: {},\n },\n },\n languages: sastSettings.supportedLanguages,\n });\n\n if (result?.fileBundle.skippedOversizedFiles?.length) {\n debug(\n '\\n',\n chalk.yellow(\n `Warning!\\nFiles were skipped in the analysis due to their size being greater than ${MAX_FILE_SIZE}B. Skipped files: ${[\n ...result.fileBundle.skippedOversizedFiles,\n ].join(', ')}`,\n ),\n );\n }\n\n if (result?.analysisResults.type === 'sarif') {\n return result.analysisResults.sarif;\n }\n return null;\n}\n\nfunction severityToAnalysisSeverity(severity: SEVERITY): AnalysisSeverity {\n if (severity === SEVERITY.CRITICAL) {\n throw new FeatureNotSupportedBySnykCodeError(SEVERITY.CRITICAL);\n }\n const severityLevel = {\n low: 1,\n medium: 2,\n high: 3,\n };\n return severityLevel[severity];\n}\n\nfunction parseSecurityResults(codeAnalysis: Log | null): Log | null {\n let securityRulesMap;\n\n if (!codeAnalysis) {\n return codeAnalysis;\n }\n\n const rules = codeAnalysis.runs[0].tool.driver.rules;\n const results = codeAnalysis.runs[0].results;\n\n if (rules) {\n securityRulesMap = getSecurityRulesMap(rules);\n codeAnalysis.runs[0].tool.driver.rules = Object.values(securityRulesMap);\n }\n if (results && securityRulesMap) {\n codeAnalysis.runs[0].results = getSecurityResultsOnly(\n results,\n Object.keys(securityRulesMap),\n );\n }\n\n return codeAnalysis;\n}\n\nfunction getSecurityRulesMap(\n rules: ReportingDescriptor[],\n): { [ruleId: string]: ReportingDescriptor[] } {\n const securityRulesMap = rules.reduce((acc, rule) => {\n const { id: ruleId, properties } = rule;\n const isSecurityRule = properties?.categories?.some(\n (category) => category.toLowerCase() === 'security',\n );\n if (isSecurityRule) {\n acc[ruleId] = rule;\n }\n return acc;\n }, {});\n\n return securityRulesMap;\n}\n\nfunction getSecurityResultsOnly(\n results: Result[],\n securityRules: string[],\n): Result[] {\n const securityResults = results.reduce((acc: Result[], result: Result) => {\n const securityRule = securityRules.find((sr) => sr === result?.ruleId);\n if (securityRule) {\n result.ruleIndex = securityRules.indexOf(securityRule);\n acc.push(result);\n }\n return acc;\n }, []);\n\n return securityResults;\n}\n\nfunction isLocalCodeEngine(sastSettings: SastSettings): boolean {\n const { sastEnabled, localCodeEngine } = sastSettings;\n\n return sastEnabled && localCodeEngine.enabled;\n}\n\nfunction validateLocalCodeEngineUrl(localCodeEngineUrl: string): void {\n if (localCodeEngineUrl.length === 0) {\n throw new MissingConfigurationError(\n 'Snyk Code Local Engine. Refer to our docs on https://docs.snyk.io/products/snyk-code/deployment-options/snyk-code-local-engine/cli-and-ide to learn more',\n );\n }\n}\n","import { makeRequest } from '../../request';\n\nimport { getAuthHeader } from '../../api-token';\nimport config from '../../config';\nimport { assembleQueryString } from '../../snyk-test/common';\nimport { SastSettings, TrackUsageResponse } from './types';\n\nexport async function getSastSettingsForOrg(org): Promise<SastSettings> {\n const response = await makeRequest({\n method: 'GET',\n headers: {\n Authorization: getAuthHeader(),\n },\n qs: assembleQueryString({ org }),\n url: `${config.API}/cli-config/settings/sast`,\n gzip: true,\n json: true,\n });\n\n return response.body as SastSettings;\n}\n\nexport async function trackUsage(org): Promise<TrackUsageResponse> {\n const response = await makeRequest({\n method: 'POST',\n headers: {\n Authorization: getAuthHeader(),\n },\n qs: assembleQueryString({ org }),\n url: `${config.API}/track-sast-usage/cli`,\n gzip: true,\n json: true,\n });\n\n return response.body as TrackUsageResponse;\n}\n","export { MissingConfigurationError } from './missing-configuration-error';\nexport { FeatureNotSupportedBySnykCodeError } from './unsupported-feature-snyk-code-error';\n","import { CustomError } from '../../../errors/custom-error';\n\nexport class MissingConfigurationError extends CustomError {\n public readonly action: string;\n\n constructor(action: string, additionalUserHelp = '') {\n super(`Missing configuration for ${action}.`);\n this.code = 422;\n this.action = action;\n\n this.userMessage = `'Configuration is missing or wrong for ${action}'. ${additionalUserHelp}`;\n }\n}\n","import { CustomError } from '../../../errors/custom-error';\n\nexport class FeatureNotSupportedBySnykCodeError extends CustomError {\n public readonly feature: string;\n\n constructor(feature: string, additionalUserHelp = '') {\n super(`Unsupported action for ${feature}.`);\n this.code = 422;\n this.feature = feature;\n\n this.userMessage = `'${feature}' is not supported for snyk code. ${additionalUserHelp}`;\n }\n}\n","import * as Sarif from 'sarif';\nimport * as Debug from 'debug';\nimport chalk from 'chalk';\nimport { icon, color } from '../../../theme';\nimport { colorTextBySeverity, SEVERITY } from '../../../snyk-test/common';\nimport { rightPadWithSpaces } from '../../../right-pad';\nimport { Options } from '../../../types';\nimport { Log } from '../types';\n\nconst debug = Debug('code-output');\n\nexport function getCodeDisplayedOutput(\n codeTest: Log,\n meta: string,\n prefix: string,\n): string {\n let issues: { [index: string]: string[] } = {};\n\n if (codeTest.runs[0].results) {\n const results: Sarif.Result[] = codeTest.runs[0].results;\n\n const rulesMap: {\n [ruleId: string]: Sarif.ReportingDescriptor;\n } = getRulesMap(codeTest.runs[0].tool.driver.rules || []);\n\n issues = getIssues(results, rulesMap);\n }\n\n const issuesText =\n issues.low.join('') + issues.medium.join('') + issues.high.join('');\n const summaryOKText = color.status.success(`${icon.VALID} Test completed`);\n const codeIssueSummary = getCodeIssuesSummary(issues);\n\n return (\n prefix +\n issuesText +\n '\\n' +\n summaryOKText +\n '\\n\\n' +\n meta +\n '\\n\\n' +\n codeIssueSummary\n );\n}\n\nfunction getCodeIssuesSummary(issues: { [index: string]: string[] }): string {\n const lowSeverityText = issues.low.length\n ? colorTextBySeverity(SEVERITY.LOW, ` ${issues.low.length} [Low] `)\n : '';\n const mediumSeverityText = issues.medium.length\n ? colorTextBySeverity(SEVERITY.MEDIUM, ` ${issues.medium.length} [Medium] `)\n : '';\n const highSeverityText = issues.high.length\n ? colorTextBySeverity(SEVERITY.HIGH, `${issues.high.length} [High] `)\n : '';\n\n const codeIssueCount =\n issues.low.length + issues.medium.length + issues.high.length;\n const codeIssueFound = `${codeIssueCount} Code issue${\n codeIssueCount > 0 ? 's' : ''\n } found`;\n const issuesBySeverityText =\n highSeverityText + mediumSeverityText + lowSeverityText;\n const vulnPathsText = color.status.success(\n `${icon.VALID} Awesome! No issues were found.`,\n );\n\n return codeIssueCount > 0\n ? codeIssueFound + '\\n' + issuesBySeverityText\n : vulnPathsText;\n}\n\nfunction getIssues(\n results: Sarif.Result[],\n rulesMap: { [ruleId: string]: Sarif.ReportingDescriptor },\n): { [index: string]: string[] } {\n const issuesInit: { [index: string]: string[] } = {\n low: [],\n medium: [],\n high: [],\n };\n\n const issues = results.reduce((acc, res) => {\n if (res.locations?.length) {\n const location = res.locations[0].physicalLocation;\n if (res.level && location?.artifactLocation && location?.region) {\n const severity = sarifToSeverityLevel(res.level);\n const ruleId = res.ruleId!;\n if (!(ruleId in rulesMap)) {\n debug('Rule ID does not exist in the rules list');\n }\n const ruleName =\n rulesMap[ruleId].shortDescription?.text || rulesMap[ruleId].name;\n const ruleIdSeverityText = colorTextBySeverity(\n severity,\n ` ${icon.ISSUE} [${severity}] ${ruleName}`,\n );\n const artifactLocationUri = location.artifactLocation.uri;\n const startLine = location.region.startLine;\n const text = res.message.text;\n\n const title = ruleIdSeverityText;\n const path = ` Path: ${artifactLocationUri}, line ${startLine}`;\n const info = ` Info: ${text}`;\n acc[severity.toLowerCase()].push(`${title} \\n ${path} \\n ${info}\\n\\n`);\n }\n }\n return acc;\n }, issuesInit);\n\n return issues;\n}\n\nfunction getRulesMap(\n rules: Sarif.ReportingDescriptor[],\n): { [ruleId: string]: Sarif.ReportingDescriptor } {\n const rulesMapByID = rules.reduce((acc, rule) => {\n acc[rule.id] = rule;\n return acc;\n }, {});\n\n return rulesMapByID;\n}\n\nfunction sarifToSeverityLevel(\n sarifConfigurationLevel: Sarif.ReportingConfiguration.level,\n): string {\n const severityLevel = {\n note: 'Low',\n warning: 'Medium',\n error: 'High',\n };\n\n return severityLevel[sarifConfigurationLevel] as string;\n}\n\nexport function getMeta(options: Options, path: string): string {\n const padToLength = 19; // chars to align\n const orgName = options.org;\n const projectPath = options.path || path;\n const meta = [\n chalk.bold(rightPadWithSpaces('Organization: ', padToLength)) + orgName,\n ];\n meta.push(\n chalk.bold(rightPadWithSpaces('Test type: ', padToLength)) +\n 'Static code analysis',\n );\n meta.push(\n chalk.bold(rightPadWithSpaces('Project path: ', padToLength)) + projectPath,\n );\n\n return meta.join('\\n');\n}\n\nexport function getPrefix(path: string): string {\n return chalk.bold.white('\\nTesting ' + path + ' ...\\n\\n');\n}\n","import chalk from 'chalk';\nimport * as debugLib from 'debug';\nimport { v4 as uuidv4 } from 'uuid';\nimport { getCodeAnalysisAndParseResults } from './analysis';\nimport { getSastSettings } from './settings';\nimport {\n getCodeDisplayedOutput,\n getPrefix,\n getMeta,\n} from './format/output-format';\nimport { EcosystemPlugin } from '../../ecosystems/types';\nimport { FailedToRunTestError, NoSupportedSastFiles } from '../../errors';\nimport { jsonStringifyLargeObject } from '../../json';\nimport * as analytics from '../../analytics';\n\nconst debug = debugLib('snyk-code');\n\nexport const codePlugin: EcosystemPlugin = {\n // We currently don't use scan/display. we will need to consolidate ecosystem plugins\n // to accept flows that act differently in the `testDependencies` step, as we have here\n async scan() {\n return null as any;\n },\n async display() {\n return '';\n },\n async test(paths, options) {\n const requestId = uuidv4();\n debug(`Request ID: ${requestId}`);\n try {\n analytics.add('sast-scan', true);\n const sastSettings = await getSastSettings(options);\n // Currently code supports only one path\n const path = paths[0];\n\n const sarifTypedResult = await getCodeAnalysisAndParseResults(\n path,\n options,\n sastSettings,\n requestId,\n );\n\n if (!sarifTypedResult) {\n throw new NoSupportedSastFiles();\n }\n const numOfIssues = sarifTypedResult!.runs?.[0].results?.length || 0;\n analytics.add('sast-issues-found', numOfIssues);\n let newOrg = options.org;\n if (!newOrg && sastSettings.org) {\n newOrg = sastSettings.org;\n }\n const meta = getMeta({ ...options, org: newOrg }, path);\n const prefix = getPrefix(path);\n let readableResult = getCodeDisplayedOutput(\n sarifTypedResult!,\n meta,\n prefix,\n );\n if (numOfIssues > 0 && options['no-markdown']) {\n sarifTypedResult.runs?.[0].results?.forEach(({ message }) => {\n delete message.markdown;\n });\n }\n let sarifResult: string | undefined;\n if (options['sarif-file-output']) {\n sarifResult = jsonStringifyLargeObject(sarifTypedResult);\n }\n let jsonResult: string | undefined;\n if (options['json-file-output']) {\n jsonResult = jsonStringifyLargeObject(sarifTypedResult);\n }\n if (options.sarif || options.json) {\n readableResult = jsonStringifyLargeObject(sarifTypedResult);\n }\n if (numOfIssues > 0) {\n throwIssuesError({ readableResult, sarifResult, jsonResult });\n }\n return sarifResult ? { readableResult, sarifResult } : { readableResult };\n } catch (error) {\n let err: Error;\n if (isCodeClientError(error)) {\n const isUnauthorized = isUnauthorizedError(error)\n ? 'Unauthorized: '\n : '';\n err = new FailedToRunTestError(\n `${isUnauthorized}Failed to run 'code test'`,\n error.statusCode,\n );\n } else if (error instanceof Error) {\n err = error;\n } else if (isUnauthorizedError(error)) {\n err = new FailedToRunTestError(error.message, error.code);\n } else {\n err = new Error(error);\n }\n debug(\n chalk.bold.red(\n `requestId: ${requestId} statusCode:${error.code ||\n error.statusCode}, message: ${error.statusText || error.message}`,\n ),\n );\n throw err;\n }\n },\n};\n\nfunction isCodeClientError(error: object): boolean {\n return (\n error.hasOwnProperty('statusCode') &&\n error.hasOwnProperty('statusText') &&\n error.hasOwnProperty('apiName')\n );\n}\n\nfunction isUnauthorizedError(error: any): boolean {\n return (\n error.statusCode === 401 ||\n error.statusCode === 403 ||\n error.code === 403 ||\n error.code === 401\n );\n}\n\nfunction throwIssuesError(args: {\n readableResult: string;\n sarifResult: string | undefined;\n jsonResult: string | undefined;\n}): Error {\n const err = new Error(args.readableResult) as any;\n err.code = 'VULNS';\n if (args.sarifResult !== undefined) {\n err.sarifStringifiedResults = args.sarifResult;\n }\n if (args.jsonResult !== undefined) {\n err.jsonStringifiedResults = args.jsonResult;\n }\n throw err;\n}\n","import { Options } from '../../types';\nimport { SastSettings } from './types';\nimport config from '../../config';\nimport { getSastSettingsForOrg, trackUsage } from './checks';\n\nimport {\n AuthFailedError,\n FailedToRunTestError,\n FeatureNotSupportedForOrgError,\n NotFoundError,\n} from '../../errors';\n\nexport async function getSastSettings(options: Options): Promise<SastSettings> {\n const org = options.org || config.org;\n\n // This is an unexpected path, code plugin executed for non-code command.\n if (!options.code) {\n throw new FeatureNotSupportedForOrgError(org);\n }\n\n const sastSettingsResponse = await getSastSettingsForOrg(org);\n\n if (\n sastSettingsResponse?.code === 401 ||\n sastSettingsResponse?.code === 403\n ) {\n throw AuthFailedError(\n sastSettingsResponse.error,\n sastSettingsResponse.code,\n );\n }\n\n if (sastSettingsResponse?.code === 404) {\n throw new NotFoundError(sastSettingsResponse?.userMessage);\n }\n\n if (!sastSettingsResponse.sastEnabled) {\n throw new FeatureNotSupportedForOrgError(\n org,\n 'Snyk Code',\n 'enable in Settings > Snyk Code',\n );\n }\n\n const trackUsageResponse = await trackUsage(org);\n if (trackUsageResponse.code === 429) {\n throw new FailedToRunTestError(\n trackUsageResponse.userMessage,\n trackUsageResponse.code,\n );\n }\n return sastSettingsResponse;\n}\n","export { analysisProgressUpdate } from './testEmitter';\n","import { emitter as codeEmitter } from '@snyk/code-client';\nimport { spinner } from '../../../spinner';\nimport * as debugLib from 'debug';\n\nexport function analysisProgressUpdate(): void {\n let currentMessage = '';\n const showSpinner = (message: string): Promise<void> | undefined => {\n if (currentMessage === message) return;\n\n spinner.clear<void>(currentMessage)();\n currentMessage = message;\n return spinner(message);\n };\n\n codeEmitter.on('supportedFilesLoaded', () =>\n showSpinner(`Supported extensions loaded`),\n );\n codeEmitter.on('scanFilesProgress', (processed: number) =>\n showSpinner(`Scanning files: ${Math.round(processed / 100)}00`),\n );\n codeEmitter.on('createBundleProgress', (processed: number, total: number) =>\n showSpinner(`Batching file upload: ${processed} / ${total}`),\n );\n codeEmitter.on('uploadBundleProgress', (processed: number, total: number) =>\n showSpinner(`Upload progress: ${processed} / ${total}`),\n );\n codeEmitter.on('analyseProgress', (data: any) =>\n showSpinner(`${data.status}: ${Math.round(data.progress * 100)}%`),\n );\n codeEmitter.on('sendError', (error) => {\n throw error;\n });\n codeEmitter.on('apiRequestLog', (data) => {\n const debug = debugLib('snyk-code');\n debug('---> API request log ', data);\n });\n}\n","import * as snykPolicyLib from 'snyk-policy';\nimport * as debugModule from 'debug';\nimport { PackageExpanded } from 'snyk-resolve-deps';\n\nimport { pluckPolicies } from '.';\nimport { SupportedPackageManagers } from '../package-managers';\nimport { PackageJson, PolicyOptions } from '../types';\nimport * as analytics from '../analytics';\n\nconst debug = debugModule('snyk');\n\nexport async function findAndLoadPolicy(\n root: string,\n scanType: SupportedPackageManagers | 'docker' | 'iac' | 'cpp',\n options: PolicyOptions,\n pkg?: PackageExpanded,\n scannedProjectFolder?: string,\n): Promise<Policy | undefined> {\n const isDocker = scanType === 'docker';\n const isNodeProject = ['npm', 'yarn'].includes(scanType);\n // monitor\n let policyLocations: string[] = [\n options['policy-path'] || scannedProjectFolder || root,\n ];\n if (isDocker) {\n policyLocations = policyLocations.filter((loc) => loc !== root);\n } else if (isNodeProject) {\n // TODO: pluckPolicies expects a package.json object to\n // find and apply policies in node_modules\n policyLocations = policyLocations.concat(pluckPolicies(pkg as PackageJson));\n }\n\n debug('Potential policy locations found:', policyLocations);\n analytics.add('policies', policyLocations.length);\n analytics.add('policyLocations', policyLocations);\n\n if (policyLocations.length === 0) {\n return;\n }\n let policy;\n try {\n policy = await snykPolicyLib.load(policyLocations, options);\n } catch (err) {\n // note: inline catch, to handle error from .load\n // if the .snyk file wasn't found, it is fine\n if (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n throw err;\n }\n }\n return policy;\n}\n\nexport interface Policy {\n filter(vulns: any, root?: string, matchStrategy?: string): any;\n exclude?: { [key: string]: string[] };\n ignore?: any;\n}\n","export { pluckPolicies } from './pluck-policies';\nexport { findAndLoadPolicy } from './find-and-load-policy';\n","const flatten = require('lodash.flatten');\nimport { PackageExpanded } from 'snyk-resolve-deps';\n\nexport function pluckPolicies(pkg: PackageExpanded): string[] | string {\n if (!pkg) {\n return [];\n }\n\n if (pkg.snyk) {\n return pkg.snyk;\n }\n\n if (!pkg.dependencies) {\n return [];\n }\n\n return flatten(\n Object.keys(pkg.dependencies)\n .map((name: string) => pluckPolicies(pkg.dependencies[name]))\n .filter(Boolean),\n );\n}\n","import { sleep } from '../common';\nimport { ScanResult } from '../ecosystems/types';\nimport { ResolutionMeta } from './types';\n\nexport async function delayNextStep(\n attemptsCount: number,\n maxAttempts: number,\n pollInterval: number,\n): Promise<void> {\n attemptsCount++;\n checkPollingAttempts(maxAttempts)(attemptsCount);\n await sleep(pollInterval);\n}\n\nfunction checkPollingAttempts(maxAttempts: number) {\n return (attemptsCount: number): void | Error => {\n if (attemptsCount > maxAttempts) {\n throw new Error('Exceeded Polling maxAttempts');\n }\n };\n}\n\nexport function extractResolutionMetaFromScanResult({\n name,\n target,\n identity,\n policy,\n targetReference,\n}: ScanResult): ResolutionMeta {\n return {\n name,\n target,\n identity,\n policy,\n targetReference,\n };\n}\n","import config from '../config';\nimport { isCI } from '../is-ci';\nimport { makeRequest } from '../request/promise';\nimport { Contributor, Options } from '../types';\n\nimport { assembleQueryString } from '../../lib/snyk-test/common';\nimport { getAuthHeader } from '../api-token';\nimport { MonitorDependenciesResponse, ScanResult } from '../ecosystems/types';\nimport {\n ResolutionMeta,\n ResolveAndMonitorFactsResponse,\n ResolveFactsState,\n} from './types';\nimport { delayNextStep } from './common';\nimport {\n generateProjectAttributes,\n generateTags,\n} from '../../cli/commands/monitor';\n\nexport async function requestMonitorPollingToken(\n options: Options,\n isAsync: boolean,\n scanResult: ScanResult,\n): Promise<ResolveFactsState> {\n if (scanResult?.target && scanResult.target['remoteUrl'] === '') {\n scanResult.target['remoteUrl'] = scanResult.name;\n }\n\n const payload = {\n method: 'PUT',\n url: `${config.API}/monitor-dependencies`,\n json: true,\n headers: {\n 'x-is-ci': isCI(),\n authorization: getAuthHeader(),\n },\n body: {\n isAsync,\n scanResult,\n method: 'cli',\n },\n qs: { ...assembleQueryString(options) },\n };\n return await makeRequest<ResolveAndMonitorFactsResponse>(payload);\n}\n\nexport async function pollingMonitorWithTokenUntilDone(\n token: string,\n isAsync: boolean,\n options: Options,\n pollInterval: number,\n attemptsCount: number,\n maxAttempts = Infinity,\n resolutionMeta: ResolutionMeta | undefined,\n contributors: Contributor[] = [],\n): Promise<MonitorDependenciesResponse> {\n const payload = {\n method: 'PUT',\n url: `${config.API}/monitor-dependencies/${token}`,\n json: true,\n headers: {\n 'x-is-ci': isCI(),\n authorization: getAuthHeader(),\n },\n qs: { ...assembleQueryString(options) },\n body: {\n isAsync,\n resolutionMeta,\n contributors,\n method: 'cli',\n tags: generateTags(options),\n attributes: generateProjectAttributes(options),\n projectName:\n resolutionMeta?.name || options['project-name'] || config.PROJECT_NAME,\n },\n };\n\n const response = await makeRequest<ResolveAndMonitorFactsResponse>(payload);\n if (response.ok && response.isMonitored) {\n return response;\n }\n\n await delayNextStep(attemptsCount, maxAttempts, pollInterval);\n return await pollingMonitorWithTokenUntilDone(\n token,\n isAsync,\n options,\n pollInterval,\n attemptsCount,\n maxAttempts,\n resolutionMeta,\n contributors,\n );\n}\n","import config from '../config';\nimport { isCI } from '../is-ci';\nimport { makeRequest } from '../request/promise';\nimport { Options } from '../types';\n\nimport { assembleQueryString } from '../snyk-test/common';\nimport { getAuthHeader } from '../api-token';\nimport { ScanResult } from '../ecosystems/types';\n\nimport { ResolveAndTestFactsResponse } from './types';\nimport { delayNextStep } from './common';\nimport { TestDependenciesResult } from '../snyk-test/legacy';\n\nexport async function requestTestPollingToken(\n options: Options,\n isAsync: boolean,\n scanResult: ScanResult,\n): Promise<ResolveAndTestFactsResponse> {\n const payload = {\n method: 'POST',\n url: `${config.API}/test-dependencies`,\n json: true,\n headers: {\n 'x-is-ci': isCI(),\n authorization: getAuthHeader(),\n },\n body: {\n isAsync,\n scanResult,\n },\n qs: assembleQueryString(options),\n };\n return await makeRequest<ResolveAndTestFactsResponse>(payload);\n}\n\nexport async function pollingTestWithTokenUntilDone(\n token: string,\n type: string,\n options: Options,\n pollInterval: number,\n attemptsCount: number,\n maxAttempts = Infinity,\n): Promise<TestDependenciesResult> {\n const payload = {\n method: 'GET',\n url: `${config.API}/test-dependencies/${token}`,\n json: true,\n headers: {\n 'x-is-ci': isCI(),\n authorization: getAuthHeader(),\n },\n qs: { ...assembleQueryString(options), type },\n };\n\n const response = await makeRequest<ResolveAndTestFactsResponse>(payload);\n\n if (response.result) {\n const {\n issues,\n issuesData,\n depGraphData,\n depsFilePaths,\n fileSignaturesDetails,\n } = response.result;\n return {\n issues,\n issuesData,\n depGraphData,\n depsFilePaths,\n fileSignaturesDetails,\n };\n }\n\n await delayNextStep(attemptsCount, maxAttempts, pollInterval);\n return await pollingTestWithTokenUntilDone(\n token,\n type,\n options,\n pollInterval,\n attemptsCount,\n maxAttempts,\n );\n}\n","import config from './config';\nimport * as depGraphLib from '@snyk/dep-graph';\nimport { DepDict, Options, MonitorOptions } from './types';\nimport { legacyCommon as legacyApi } from '@snyk/cli-interface';\nimport { countPathsToGraphRoot } from './utils';\nimport { jsonStringifyLargeObject } from './json';\n\nexport async function maybePrintDepGraph(\n options: Options | MonitorOptions,\n depGraph: depGraphLib.DepGraph,\n) {\n // TODO @boost: remove this logic once we get a valid depGraph print format\n const graphPathsCount = countPathsToGraphRoot(depGraph);\n const hasTooManyPaths = graphPathsCount > config.PRUNE_DEPS_THRESHOLD;\n\n if (!hasTooManyPaths) {\n const depTree = (await depGraphLib.legacy.graphToDepTree(\n depGraph,\n depGraph.pkgManager.name,\n )) as legacyApi.DepTree;\n maybePrintDepTree(options, depTree);\n } else {\n if (options['print-deps']) {\n if (options.json) {\n console.warn(\n '--print-deps --json option not yet supported for large projects. Displaying graph json output instead',\n );\n // TODO @boost: add as output graphviz 'dot' file to visualize?\n console.log(jsonStringifyLargeObject(depGraph.toJSON()));\n } else {\n console.warn(\n '--print-deps option not yet supported for large projects. Try with --json.',\n );\n }\n }\n }\n}\n\n// This option is still experimental and might be deprecated.\n// It might be a better idea to convert it to a command (i.e. do not perform test/monitor).\nexport function maybePrintDepTree(\n options: Options | MonitorOptions,\n rootPackage: legacyApi.DepTree,\n) {\n if (options['print-deps']) {\n if (options.json) {\n // Will produce 2 JSON outputs, one for the deps, one for the vuln scan.\n console.log(jsonStringifyLargeObject(rootPackage));\n } else {\n printDepsForTree({ [rootPackage.name!]: rootPackage });\n }\n }\n}\n\nfunction printDepsForTree(depDict: DepDict, prefix = '') {\n let counter = 0;\n const keys = Object.keys(depDict);\n for (const name of keys) {\n const dep = depDict[name];\n let branch = '├─ ';\n const last = counter === keys.length - 1;\n if (last) {\n branch = '└─ ';\n }\n console.log(\n prefix +\n (prefix ? branch : '') +\n dep.name +\n ' @ ' +\n (dep.version ? dep.version : ''),\n );\n if (dep.dependencies) {\n printDepsForTree(dep.dependencies, prefix + (last ? ' ' : '│ '));\n }\n counter++;\n }\n}\n","import * as gitTargetBuilder from './target-builders/git';\nimport * as containerTargetBuilder from './target-builders/container';\nimport { GitTarget, ContainerTarget } from './types';\nimport { DepTree } from '../types';\nimport { InvalidRemoteUrlError } from '../errors/invalid-remote-url-error';\nimport { ScannedProject } from '@snyk/cli-interface/legacy/common';\n\nconst TARGET_BUILDERS = [containerTargetBuilder, gitTargetBuilder];\ninterface Options {\n 'remote-repo-url'?: string;\n docker?: boolean; // docker is coming from Options/TestOptions\n isDocker?: boolean; // isDocker coming from MonitorMeta\n}\nexport async function getInfo(\n scannedProject: ScannedProject,\n options: Options,\n packageInfo?: DepTree,\n): Promise<GitTarget | ContainerTarget | null> {\n const isFromContainer = options.docker || options.isDocker || false;\n for (const builder of TARGET_BUILDERS) {\n const target = await builder.getInfo({\n isFromContainer,\n scannedProject,\n packageInfo,\n });\n\n if (target) {\n const remoteUrl = options['remote-repo-url'];\n\n if (!remoteUrl) {\n return target;\n }\n\n if (typeof remoteUrl !== 'string') {\n throw new InvalidRemoteUrlError();\n }\n return { ...target, remoteUrl };\n }\n }\n\n return null;\n}\n","import { DepTree } from '../../types';\nimport { ContainerTarget } from '../types';\nimport { ScannedProject } from '@snyk/cli-interface/legacy/common';\n\nexport async function getInfo({\n isFromContainer,\n scannedProject,\n packageInfo,\n}: {\n isFromContainer: boolean;\n scannedProject: ScannedProject;\n packageInfo?: DepTree;\n}): Promise<ContainerTarget | null> {\n // safety check\n if (!isFromContainer) {\n return null;\n }\n\n const imageNameOnProjectMeta =\n scannedProject.meta && scannedProject.meta.imageName;\n return {\n image:\n imageNameOnProjectMeta ||\n (packageInfo as any)?.image ||\n packageInfo?.name,\n };\n}\n","import * as url from 'url';\nimport subProcess = require('../../sub-process');\nimport { GitTarget } from '../types';\n\n// for scp-like syntax [user@]server:project.git\nconst originRegex = /(.+@)?(.+):(.+$)/;\n\nexport async function getInfo({\n isFromContainer,\n cwd,\n}: {\n isFromContainer: boolean;\n cwd?: string;\n}): Promise<GitTarget | null> {\n // safety check\n if (isFromContainer) {\n return null;\n }\n\n const target: GitTarget = {};\n\n try {\n const origin: string | null | undefined = (\n await subProcess.execute('git', ['remote', 'get-url', 'origin'], { cwd })\n ).trim();\n\n if (origin) {\n const { protocol, host, pathname = '' } = url.parse(origin);\n\n // Not handling git:// as it has no connection options\n if (host && protocol && ['ssh:', 'http:', 'https:'].includes(protocol)) {\n // same format for parseable URLs\n target.remoteUrl = `http://${host}${pathname}`;\n } else {\n const originRes = originRegex.exec(origin);\n if (originRes && originRes[2] && originRes[3]) {\n target.remoteUrl = `http://${originRes[2]}/${originRes[3]}`;\n } else {\n // else keep the original\n target.remoteUrl = origin;\n }\n }\n }\n } catch (err) {\n // Swallowing exception since we don't want to break the monitor if there is a problem\n // executing git commands.\n }\n\n try {\n target.branch = (\n await subProcess.execute('git', ['rev-parse', '--abbrev-ref', 'HEAD'], {\n cwd,\n })\n ).trim();\n } catch (err) {\n // Swallowing exception since we don't want to break the monitor if there is a problem\n // executing git commands.\n }\n\n return target;\n}\n","export interface GitTarget {\n remoteUrl?: string;\n branch?: string;\n}\n\nexport interface ContainerTarget {\n image?: string;\n}\n\nexport function isGitTarget(target: any): target is GitTarget {\n return target && (target.branch || target.remoteUrl);\n}\n","import * as _debug from 'debug';\nimport { DepGraph, legacy } from '@snyk/dep-graph';\n\nimport { DepTree } from './types';\nimport config from './config';\nimport { TooManyVulnPaths } from './errors';\nimport * as analytics from '../lib/analytics';\nimport { SupportedPackageManagers } from './package-managers';\nimport { countPathsToGraphRoot } from './utils';\n\nconst debug = _debug('snyk:prune');\n\nconst { depTreeToGraph, graphToDepTree } = legacy;\n\nexport async function pruneGraph(\n depGraph: DepGraph,\n packageManager: SupportedPackageManagers,\n pruneIsRequired = false,\n): Promise<DepGraph> {\n const prePrunePathsCount = countPathsToGraphRoot(depGraph);\n const isDenseGraph = prePrunePathsCount > config.PRUNE_DEPS_THRESHOLD;\n\n debug('rootPkg', depGraph.rootPkg);\n debug('prePrunePathsCount: ' + prePrunePathsCount);\n debug('isDenseGraph', isDenseGraph);\n analytics.add('prePrunedPathsCount', prePrunePathsCount);\n if (isDenseGraph || pruneIsRequired) {\n debug('Trying to prune the graph');\n const pruneStartTime = Date.now();\n const prunedTree = (await graphToDepTree(depGraph, packageManager, {\n deduplicateWithinTopLevelDeps: true,\n })) as DepTree;\n const graphToTreeEndTime = Date.now();\n analytics.add(\n 'prune.graphToTreeDuration',\n graphToTreeEndTime - pruneStartTime,\n );\n const prunedGraph = await depTreeToGraph(prunedTree, packageManager);\n analytics.add('prune.treeToGraphDuration', Date.now() - graphToTreeEndTime);\n const postPrunePathsCount = countPathsToGraphRoot(prunedGraph);\n analytics.add('postPrunedPathsCount', postPrunePathsCount);\n debug('postPrunePathsCount' + postPrunePathsCount);\n if (postPrunePathsCount > config.MAX_PATH_COUNT) {\n debug('Too many paths to process the project');\n //TODO replace the throw below with TooManyPaths we do not calculate vuln paths there\n throw new TooManyVulnPaths();\n }\n return prunedGraph;\n }\n return depGraph;\n}\n","import * as graphlib from '@snyk/graphlib';\nimport { CallGraph } from '@snyk/cli-interface/legacy/common';\n\nimport {\n REACHABLE_VULNS_SUPPORTED_PACKAGE_MANAGERS,\n SupportedPackageManagers,\n} from './package-managers';\nimport { isFeatureFlagSupportedForOrg } from './feature-flags';\nimport {\n AuthFailedError,\n FeatureNotSupportedByPackageManagerError,\n UnsupportedFeatureFlagError,\n} from './errors';\nimport { MonitorOptions, Options, TestOptions } from './types';\nimport { isMultiProjectScan } from './is-multi-project-scan';\n\nconst featureFlag = 'reachableVulns';\n\nexport function serializeCallGraphWithMetrics(\n callGraph: CallGraph,\n): {\n callGraph: any;\n nodeCount: number;\n edgeCount: number;\n} {\n return {\n callGraph: graphlib.json.write(callGraph),\n nodeCount: callGraph.nodeCount(),\n edgeCount: callGraph.edgeCount(),\n };\n}\n\nexport async function validatePayload(\n org: any,\n options: (Options & TestOptions) | (Options & MonitorOptions),\n packageManager?: SupportedPackageManagers,\n): Promise<boolean> {\n if (\n packageManager &&\n !isMultiProjectScan(options) &&\n !REACHABLE_VULNS_SUPPORTED_PACKAGE_MANAGERS.includes(packageManager)\n ) {\n throw new FeatureNotSupportedByPackageManagerError(\n 'Reachable vulns',\n packageManager,\n `For a list of supported package managers go to https://support.snyk.io/hc/en-us/articles/360010554837-Reachable-Vulnerabilities`,\n );\n }\n const reachableVulnsSupportedRes = await isFeatureFlagSupportedForOrg(\n featureFlag,\n org,\n );\n\n if (reachableVulnsSupportedRes.code === 401) {\n throw AuthFailedError(\n reachableVulnsSupportedRes.error,\n reachableVulnsSupportedRes.code,\n );\n }\n if (reachableVulnsSupportedRes.userMessage) {\n throw new UnsupportedFeatureFlagError(\n featureFlag,\n reachableVulnsSupportedRes.userMessage,\n );\n }\n return true;\n}\n","import { getAuthHeader } from '../api-token';\nimport * as request from './index';\n\nexport async function makeRequest<T>(payload: any): Promise<T> {\n return new Promise((resolve, reject) => {\n request.makeRequest(payload, (error, res, body) => {\n if (error) {\n return reject(error);\n }\n if (res.statusCode !== 200) {\n return reject({\n code: res.statusCode,\n message: body?.message,\n });\n }\n resolve(body);\n });\n });\n}\n\n/**\n * All rest request will essentially be the same and are JSON by default\n * Thus if no headers provided default headers are used\n * @param {any} payload for the request\n * @returns\n */\nexport async function makeRequestRest<T>(payload: any): Promise<T> {\n return new Promise((resolve, reject) => {\n payload.headers = payload.headers ?? {\n 'Content-Type': 'application/vnd.api+json',\n authorization: getAuthHeader(),\n };\n payload.json = true;\n request.makeRequest(payload, (error, res, body) => {\n if (error) {\n return reject(error);\n }\n if (res.statusCode >= 400) {\n return reject({\n code: res.statusCode,\n body: JSON.parse(body as any),\n });\n }\n resolve(JSON.parse(body as any) as T);\n });\n });\n}\n","export function rightPadWithSpaces(s: string, padding: number) {\n const padLength = padding - s.length;\n if (padLength <= 0) {\n return s;\n }\n\n return s + ' '.repeat(padLength);\n}\n","import * as path from 'path';\nimport config from '../config';\nimport { isCI } from '../is-ci';\nimport { getPlugin } from '../ecosystems';\nimport { Ecosystem } from '../ecosystems/types';\nimport { Options, PolicyOptions, TestOptions } from '../types';\nimport { Payload } from './types';\nimport { assembleQueryString } from './common';\nimport { spinner } from '../spinner';\nimport { findAndLoadPolicyForScanResult } from '../ecosystems/policy';\nimport { getAuthHeader } from '../../lib/api-token';\nimport { DockerImageNotFoundError } from '../errors';\n\nexport async function assembleEcosystemPayloads(\n ecosystem: Ecosystem,\n options: Options & TestOptions & PolicyOptions,\n): Promise<Payload[]> {\n // For --all-projects packageManager is yet undefined here. Use 'all'\n let analysisTypeText = 'all dependencies for ';\n if (options.docker) {\n analysisTypeText = 'container dependencies for ';\n } else if (options.packageManager) {\n analysisTypeText = options.packageManager + ' dependencies for ';\n }\n\n const spinnerLbl =\n 'Analyzing ' +\n analysisTypeText +\n (path.relative('.', path.join(options.path, options.file || '')) ||\n path.relative('..', '.') + ' project dir');\n\n spinner.clear<void>(spinnerLbl)();\n if (!options.quiet) {\n await spinner(spinnerLbl);\n }\n\n try {\n const plugin = getPlugin(ecosystem);\n const pluginResponse = await plugin.scan(options);\n\n const payloads: Payload[] = [];\n\n // TODO: This is a temporary workaround until the plugins themselves can read policy files and set names!\n for (const scanResult of pluginResponse.scanResults) {\n // WARNING! This mutates the payload. Policy logic should be in the plugin.\n const policy = await findAndLoadPolicyForScanResult(scanResult, options);\n if (policy !== undefined) {\n scanResult.policy = policy.toString();\n }\n\n // WARNING! This mutates the payload. The project name logic should be handled in the plugin.\n scanResult.name =\n options['project-name'] || config.PROJECT_NAME || scanResult.name;\n\n payloads.push({\n method: 'POST',\n url: `${config.API}${options.testDepGraphDockerEndpoint ||\n '/test-dependencies'}`,\n json: true,\n headers: {\n 'x-is-ci': isCI(),\n authorization: getAuthHeader(),\n },\n body: {\n scanResult,\n },\n qs: assembleQueryString(options),\n });\n }\n\n return payloads;\n } catch (error) {\n if (ecosystem === 'docker' && error.message === 'authentication required') {\n throw new DockerImageNotFoundError(options.path);\n }\n if (ecosystem === 'docker' && error.message === 'invalid image format') {\n throw new DockerImageNotFoundError(options.path);\n }\n\n throw error;\n } finally {\n spinner.clear<void>(spinnerLbl)();\n }\n}\n","import * as values from 'lodash.values';\nimport * as depGraphLib from '@snyk/dep-graph';\nimport {\n DepsFilePaths,\n ScanResult,\n FileSignaturesDetails,\n} from '../ecosystems/types';\nimport { SupportedPackageManagers } from '../package-managers';\nimport { Options, SupportedProjectTypes, TestOptions } from '../types';\nimport { SEVERITIES } from './common';\n\ninterface Pkg {\n name: string;\n version?: string;\n}\n\ninterface Patch {\n version: string;\n id: string;\n urls: string[];\n modificationTime: string;\n}\n\nexport enum SEVERITY {\n LOW = 'low',\n MEDIUM = 'medium',\n HIGH = 'high',\n CRITICAL = 'critical',\n}\n\nexport enum REACHABILITY {\n FUNCTION = 'function',\n PACKAGE = 'package',\n NOT_REACHABLE = 'not-reachable',\n NO_INFO = 'no-info',\n}\n\nexport interface VulnMetaData {\n id: string;\n title: string;\n description: string;\n type: 'license' | 'vuln';\n name: string;\n info: string;\n severity: SEVERITY;\n severityValue: number;\n isNew: boolean;\n version: string;\n packageManager: SupportedPackageManagers | 'upstream';\n}\n\nexport interface GroupedVuln {\n list: AnnotatedIssue[];\n metadata: VulnMetaData;\n isIgnored: boolean;\n title: string;\n note: string | false;\n severity: SEVERITY;\n originalSeverity?: SEVERITY;\n isNew: boolean;\n name: string;\n version: string;\n isFixable: boolean;\n fixedIn: string[];\n legalInstructionsArray?: LegalInstruction[];\n reachability?: REACHABILITY;\n}\n\nexport interface LegalInstruction {\n licenseName: string;\n legalContent: string;\n}\nexport interface IssueData {\n id: string;\n packageName: string;\n version: string;\n moduleName?: string;\n below: string; // Vulnerable below version\n semver: {\n vulnerable: string | string[];\n vulnerableHashes?: string[];\n vulnerableByDistro?: {\n [distroNameAndVersion: string]: string[];\n };\n };\n patches: Patch[];\n isNew: boolean;\n description: string;\n title: string;\n severity: SEVERITY;\n fixedIn: string[];\n legalInstructions?: string;\n reachability?: REACHABILITY;\n packageManager?: SupportedProjectTypes;\n}\n\nexport type CallPath = string[];\n\nexport interface ReachableFunctionPaths {\n functionName: string;\n callPaths: CallPath[];\n}\n\nexport interface ReachablePaths {\n pathCount: number;\n paths: ReachableFunctionPaths[];\n}\n\ninterface AnnotatedIssue extends IssueData {\n credit: string[];\n name: string;\n version: string;\n from: string[];\n upgradePath: Array<string | boolean>;\n isUpgradable: boolean;\n isPatchable: boolean;\n severity: SEVERITY;\n originalSeverity?: SEVERITY;\n\n // These fields present for \"node_module\" based scans to allow remediation\n bundled?: any;\n shrinkwrap?: any;\n __filename?: string;\n parentDepType: string;\n\n type?: 'license';\n title: string;\n patch?: any;\n note?: string | false;\n publicationTime?: string;\n\n reachablePaths?: ReachablePaths;\n identifiers?: {\n [name: string]: string[];\n };\n}\n\n// Mixin, to be added to GroupedVuln / AnnotatedIssue\nexport interface DockerIssue {\n nearestFixedInVersion?: string;\n dockerfileInstruction?: any;\n dockerBaseImage?: any;\n}\n\nexport interface IgnoreSettings {\n adminOnly: boolean;\n reasonRequired: boolean;\n disregardFilesystemIgnores: boolean;\n}\n\nexport interface BasicResultData {\n ok: boolean;\n payloadType?: string;\n org: string;\n isPrivate: boolean;\n summary: string;\n packageManager?: SupportedProjectTypes;\n severityThreshold?: string;\n platform?: string;\n}\n\nexport interface LegacyVulnApiResult extends BasicResultData {\n vulnerabilities: AnnotatedIssue[];\n dependencyCount: number;\n policy: string;\n licensesPolicy: object | null;\n ignoreSettings: IgnoreSettings | null;\n docker?: {\n baseImage?: any;\n binariesVulns?: unknown;\n baseImageRemediation?: BaseImageRemediation;\n };\n projectId?: string;\n filesystemPolicy?: boolean;\n uniqueCount?: any;\n remediation?: RemediationChanges;\n}\n\nexport interface BaseImageRemediation {\n code: string;\n advice: BaseImageRemediationAdvice[];\n message?: string; // TODO: check if this is still being sent\n}\n\nexport interface BaseImageRemediationAdvice {\n message: string;\n bold?: boolean;\n color?: string;\n}\n\nexport interface TestResult extends LegacyVulnApiResult {\n targetFile?: string;\n projectName?: string;\n targetFilePath?: string;\n displayTargetFile?: string; // used for display only\n foundProjectCount?: number;\n scanResult?: ScanResult;\n}\n\ninterface UpgradePathItem {\n name: string;\n version: string;\n newVersion?: string;\n isDropped?: boolean;\n}\n\ninterface UpgradePath {\n path: UpgradePathItem[];\n}\n\ninterface FixInfo {\n upgradePaths: UpgradePath[];\n isPatchable: boolean;\n nearestFixedInVersion?: string;\n}\n\nexport interface AffectedPackages {\n [pkgId: string]: {\n pkg: Pkg;\n issues: {\n [issueId: string]: Issue;\n };\n };\n}\n\ninterface TestDepGraphResult {\n issuesData: {\n [issueId: string]: IssueData;\n };\n affectedPkgs: AffectedPackages;\n docker: {\n binariesVulns?: TestDepGraphResult;\n baseImage?: any;\n };\n remediation?: RemediationChanges;\n}\n\ninterface Issue {\n pkgName: string;\n pkgVersion?: string;\n issueId: string;\n fixInfo: FixInfo;\n}\n\nexport interface TestDependenciesResult {\n issuesData: {\n [issueId: string]: IssueData;\n };\n issues: Issue[];\n docker?: {\n baseImage: string;\n baseImageRemediation: BaseImageRemediation;\n binariesVulns: TestDepGraphResult;\n };\n remediation?: RemediationChanges;\n depsFilePaths?: DepsFilePaths;\n depGraphData: depGraphLib.DepGraphData;\n fileSignaturesDetails: FileSignaturesDetails;\n}\n\nexport interface TestDepGraphMeta {\n isPublic: boolean;\n isLicensesEnabled: boolean;\n licensesPolicy?: {\n severities: {\n [type: string]: string;\n };\n };\n projectId?: string;\n ignoreSettings?: IgnoreSettings;\n policy: string;\n org: string;\n}\n\nexport interface TestDepGraphResponse {\n result: TestDepGraphResult;\n meta: TestDepGraphMeta;\n}\n\nexport interface TestDependenciesResponse {\n result: TestDependenciesResult;\n meta: TestDepGraphMeta;\n}\n\nexport interface Ignores {\n [path: string]: {\n paths: string[][];\n meta: {\n days?: number;\n reason?: string;\n };\n };\n}\n\nexport interface PatchObject {\n [name: string]: {\n patched: string;\n };\n}\n\nexport interface Upgrade {\n upgradeTo: string; // name@version\n}\n\nexport interface UpgradeVulns extends Upgrade {\n vulns: string[];\n}\n\nexport interface UpgradeRemediation extends UpgradeVulns {\n upgrades: string[];\n}\n\nexport interface PatchRemediation {\n paths: PatchObject[];\n}\n\nexport interface DependencyUpdates {\n [from: string]: UpgradeRemediation;\n}\n\nexport interface PinRemediation extends UpgradeVulns {\n isTransitive: boolean;\n}\n\nexport interface DependencyPins {\n [name: string]: PinRemediation;\n}\n\n// Remediation changes to be applied to the project,\n// including information on all and unresolved issues.\nexport interface RemediationChanges {\n unresolved: IssueData[];\n upgrade: DependencyUpdates;\n patch: {\n [name: string]: PatchRemediation;\n };\n ignore: unknown;\n pin: DependencyPins;\n}\n\nfunction convertTestDepGraphResultToLegacy(\n res: TestDepGraphResponse,\n depGraph: depGraphLib.DepGraph,\n packageManager: SupportedProjectTypes | undefined,\n options: Options & TestOptions,\n): LegacyVulnApiResult {\n const result = res.result;\n\n const upgradePathsMap = new Map<string, string[]>();\n\n for (const pkgInfo of values(result.affectedPkgs)) {\n for (const pkgIssue of values(pkgInfo.issues)) {\n if (pkgIssue.fixInfo && pkgIssue.fixInfo.upgradePaths) {\n for (const upgradePath of pkgIssue.fixInfo.upgradePaths) {\n const legacyFromPath = pkgPathToLegacyPath(upgradePath.path);\n const vulnPathString = getVulnPathString(\n pkgIssue.issueId,\n legacyFromPath,\n );\n upgradePathsMap[vulnPathString] = toLegacyUpgradePath(\n upgradePath.path,\n );\n }\n }\n }\n }\n\n // generate the legacy vulns array (vuln-data + metada per vulnerable path).\n // use the upgradePathsMap to find available upgrade-paths\n const vulns: AnnotatedIssue[] = [];\n\n for (const pkgInfo of values(result.affectedPkgs)) {\n for (const vulnPkgPath of depGraph.pkgPathsToRoot(pkgInfo.pkg)) {\n const legacyFromPath = pkgPathToLegacyPath(vulnPkgPath.reverse());\n for (const pkgIssue of values(pkgInfo.issues)) {\n const vulnPathString = getVulnPathString(\n pkgIssue.issueId,\n legacyFromPath,\n );\n const upgradePath = upgradePathsMap[vulnPathString] || [];\n\n // TODO: we need the full issue-data for every path only for the --json output,\n // consider picking only the required fields,\n // and append the full data only for --json, to minimize chance of out-of-memory\n const annotatedIssue = Object.assign(\n {},\n result.issuesData[pkgIssue.issueId],\n {\n from: legacyFromPath,\n upgradePath,\n isUpgradable: !!upgradePath[0] || !!upgradePath[1],\n isPatchable: pkgIssue.fixInfo.isPatchable,\n name: pkgInfo.pkg.name,\n version: pkgInfo.pkg.version as string,\n nearestFixedInVersion: pkgIssue.fixInfo.nearestFixedInVersion,\n },\n ) as AnnotatedIssue & DockerIssue; // TODO(kyegupov): get rid of type assertion\n\n vulns.push(annotatedIssue);\n }\n }\n }\n\n const dockerRes = result.docker;\n\n if (dockerRes && dockerRes.binariesVulns) {\n const binariesVulns = dockerRes.binariesVulns;\n for (const pkgInfo of values(binariesVulns.affectedPkgs)) {\n for (const pkgIssue of values(pkgInfo.issues)) {\n const pkgAndVersion = (pkgInfo.pkg.name +\n '@' +\n pkgInfo.pkg.version) as string;\n const annotatedIssue = (Object.assign(\n {},\n binariesVulns.issuesData[pkgIssue.issueId],\n {\n from: ['Upstream', pkgAndVersion],\n upgradePath: [],\n isUpgradable: false,\n isPatchable: false,\n name: pkgInfo.pkg.name,\n version: pkgInfo.pkg.version as string,\n nearestFixedInVersion: pkgIssue.fixInfo.nearestFixedInVersion,\n },\n ) as any) as AnnotatedIssue; // TODO(kyegupov): get rid of forced type assertion\n vulns.push(annotatedIssue);\n }\n }\n }\n\n const meta = res.meta || {};\n\n const severityThreshold =\n options.severityThreshold === SEVERITY.LOW\n ? undefined\n : options.severityThreshold;\n\n const legacyRes: LegacyVulnApiResult = {\n vulnerabilities: vulns,\n ok: vulns.length === 0,\n dependencyCount: depGraph.getPkgs().length - 1,\n org: meta.org,\n policy: meta.policy,\n isPrivate: !meta.isPublic,\n licensesPolicy: meta.licensesPolicy || null,\n packageManager,\n projectId: meta.projectId,\n ignoreSettings: meta.ignoreSettings || null,\n docker: result.docker,\n summary: getSummary(vulns, severityThreshold),\n severityThreshold,\n remediation: result.remediation,\n };\n\n return legacyRes;\n}\n\nfunction getVulnPathString(issueId: string, vulnPath: string[]) {\n return issueId + '|' + JSON.stringify(vulnPath);\n}\n\nfunction pkgPathToLegacyPath(pkgPath: Pkg[]): string[] {\n return pkgPath.map(toLegacyPkgId);\n}\n\nfunction toLegacyUpgradePath(\n upgradePath: UpgradePathItem[],\n): Array<string | boolean> {\n return upgradePath\n .filter((item) => !item.isDropped)\n .map((item) => {\n if (!item.newVersion) {\n return false;\n }\n\n return `${item.name}@${item.newVersion}`;\n });\n}\n\nfunction toLegacyPkgId(pkg: Pkg) {\n return `${pkg.name}@${pkg.version || '*'}`;\n}\n\nfunction getSummary(vulns: object[], severityThreshold?: SEVERITY): string {\n const count = vulns.length;\n let countText = '' + count;\n const severityFilters: string[] = [];\n const severitiesArray = SEVERITIES.map((s) => s.verboseName);\n if (severityThreshold) {\n severitiesArray\n .slice(severitiesArray.indexOf(severityThreshold))\n .forEach((sev) => {\n severityFilters.push(sev);\n });\n }\n\n if (!count) {\n if (severityFilters.length) {\n return `No ${severityFilters.join(' or ')} severity vulnerabilities`;\n }\n return 'No known vulnerabilities';\n }\n\n if (severityFilters.length) {\n countText += ' ' + severityFilters.join(' or ') + ' severity';\n }\n\n return `${countText} vulnerable dependency ${pl('path', count)}`;\n}\n\nfunction pl(word, count) {\n const ext = {\n y: 'ies',\n default: 's',\n };\n\n const last = word.split('').pop();\n\n if (count > 1) {\n return word.slice(0, -1) + (ext[last] || last + ext.default);\n }\n\n return word;\n}\n\nexport { convertTestDepGraphResultToLegacy, AnnotatedIssue };\n","import * as fs from 'fs';\nimport * as get from 'lodash.get';\nimport * as path from 'path';\nimport * as pathUtil from 'path';\nimport * as debugModule from 'debug';\nimport chalk from 'chalk';\nimport { icon } from '../theme';\nimport { parsePackageString as moduleToObject } from 'snyk-module';\nimport * as depGraphLib from '@snyk/dep-graph';\nimport * as theme from '../../lib/theme';\n\nimport {\n AffectedPackages,\n AnnotatedIssue,\n convertTestDepGraphResultToLegacy,\n DockerIssue,\n LegacyVulnApiResult,\n TestDependenciesResponse,\n TestDepGraphResponse,\n TestResult,\n} from './legacy';\nimport {\n AuthFailedError,\n DockerImageNotFoundError,\n FailedToGetVulnerabilitiesError,\n FailedToGetVulnsFromUnavailableResource,\n FailedToRunTestError,\n InternalServerError,\n NoSupportedManifestsFoundError,\n UnsupportedFeatureFlagError,\n NotFoundError,\n errorMessageWithRetry,\n} from '../errors';\nimport * as snyk from '../';\nimport { isCI } from '../is-ci';\nimport * as common from './common';\nimport config from '../config';\nimport * as analytics from '../analytics';\nimport { maybePrintDepGraph, maybePrintDepTree } from '../print-deps';\nimport { ContainerTarget, GitTarget } from '../project-metadata/types';\nimport * as projectMetadata from '../project-metadata';\nimport {\n DepTree,\n Options,\n PolicyOptions,\n SupportedProjectTypes,\n TestOptions,\n} from '../types';\nimport { pruneGraph } from '../prune';\nimport { getDepsFromPlugin } from '../plugins/get-deps-from-plugin';\nimport {\n MultiProjectResultCustom,\n ScannedProjectCustom,\n} from '../plugins/get-multi-plugin-result';\nimport { extractPackageManager } from '../plugins/extract-package-manager';\nimport { getExtraProjectCount } from '../plugins/get-extra-project-count';\nimport { serializeCallGraphWithMetrics } from '../reachable-vulns';\nimport { validateOptions } from '../options-validator';\nimport { findAndLoadPolicy } from '../policy';\nimport {\n Payload,\n PayloadBody,\n DepTreeFromResolveDeps,\n TestDependenciesRequest,\n} from './types';\nimport { CallGraphError, CallGraph } from '@snyk/cli-interface/legacy/common';\nimport * as alerts from '../alerts';\nimport { abridgeErrorMessage } from '../error-format';\nimport { getAuthHeader } from '../api-token';\nimport { getEcosystem } from '../ecosystems';\nimport { Issue } from '../ecosystems/types';\nimport { assembleEcosystemPayloads } from './assemble-payloads';\nimport { makeRequest } from '../request';\nimport { spinner } from '../spinner';\n\nconst debug = debugModule('snyk:run-test');\n\nconst ANALYTICS_PAYLOAD_MAX_LENGTH = 1024;\n\nfunction prepareResponseForParsing(\n payload: Payload,\n response: TestDependenciesResponse,\n options: Options & TestOptions,\n): any {\n const ecosystem = getEcosystem(options);\n return ecosystem\n ? prepareEcosystemResponseForParsing(payload, response, options)\n : prepareLanguagesResponseForParsing(payload);\n}\n\nfunction prepareEcosystemResponseForParsing(\n payload: Payload,\n response: TestDependenciesResponse,\n options: Options & TestOptions,\n) {\n const testDependenciesRequest = payload.body as\n | TestDependenciesRequest\n | undefined;\n const payloadBody = testDependenciesRequest?.scanResult;\n const depGraphData: depGraphLib.DepGraphData | undefined =\n response?.result?.depGraphData;\n const depGraph =\n depGraphData !== undefined\n ? depGraphLib.createFromJSON(depGraphData)\n : undefined;\n const imageUserInstructions = payloadBody?.facts.find(\n (fact) =>\n fact.type === 'dockerfileAnalysis' ||\n fact.type === 'autoDetectedUserInstructions',\n );\n\n const dockerfilePackages = imageUserInstructions?.data?.dockerfilePackages;\n const projectName = payloadBody?.name || depGraph?.rootPkg.name;\n const packageManager = payloadBody?.identity?.type as SupportedProjectTypes;\n const targetFile = payloadBody?.identity?.targetFile || options.file;\n const platform = payloadBody?.identity?.args?.platform;\n\n analytics.add('depGraph', !!depGraph);\n analytics.add('isDocker', !!options.docker);\n\n return {\n depGraph,\n dockerfilePackages,\n projectName,\n targetFile,\n pkgManager: packageManager,\n displayTargetFile: targetFile,\n foundProjectCount: undefined,\n payloadPolicy: payloadBody?.policy,\n platform,\n scanResult: payloadBody,\n };\n}\n\nfunction prepareLanguagesResponseForParsing(payload: Payload) {\n const payloadBody = payload.body as PayloadBody | undefined;\n const payloadPolicy = payloadBody && payloadBody.policy;\n const depGraph = payloadBody && payloadBody.depGraph;\n const pkgManager =\n depGraph &&\n depGraph.pkgManager &&\n (depGraph.pkgManager.name as SupportedProjectTypes);\n const targetFile = payloadBody && payloadBody.targetFile;\n const projectName =\n payloadBody?.projectNameOverride || payloadBody?.originalProjectName;\n const foundProjectCount = payloadBody?.foundProjectCount;\n const displayTargetFile = payloadBody?.displayTargetFile;\n let dockerfilePackages;\n if (\n payloadBody &&\n payloadBody.docker &&\n payloadBody.docker.dockerfilePackages\n ) {\n dockerfilePackages = payloadBody.docker.dockerfilePackages;\n }\n analytics.add('depGraph', !!depGraph);\n analytics.add('isDocker', !!(payloadBody && payloadBody.docker));\n return {\n depGraph,\n payloadPolicy,\n pkgManager,\n targetFile,\n projectName,\n foundProjectCount,\n displayTargetFile,\n dockerfilePackages,\n };\n}\n\nfunction isTestDependenciesResponse(\n response:\n | TestDepGraphResponse\n | TestDependenciesResponse\n | LegacyVulnApiResult,\n): response is TestDependenciesResponse {\n const assumedTestDependenciesResponse = response as TestDependenciesResponse;\n return assumedTestDependenciesResponse?.result?.issues !== undefined;\n}\n\nfunction convertIssuesToAffectedPkgs(\n response:\n | TestDepGraphResponse\n | TestDependenciesResponse\n | LegacyVulnApiResult,\n): TestDepGraphResponse | TestDependenciesResponse | LegacyVulnApiResult {\n if (!(response as any).result) {\n return response;\n }\n\n if (!isTestDependenciesResponse(response)) {\n return response;\n }\n\n response.result['affectedPkgs'] = getAffectedPkgsFromIssues(\n response.result.issues,\n );\n return response;\n}\n\nfunction getAffectedPkgsFromIssues(issues: Issue[]): AffectedPackages {\n const result: AffectedPackages = {};\n\n for (const issue of issues) {\n const packageId = `${issue.pkgName}@${issue.pkgVersion || ''}`;\n\n if (result[packageId] === undefined) {\n result[packageId] = {\n pkg: { name: issue.pkgName, version: issue.pkgVersion },\n issues: {},\n };\n }\n\n result[packageId].issues[issue.issueId] = issue;\n }\n\n return result;\n}\n\nasync function sendAndParseResults(\n payloads: Payload[],\n spinnerLbl: string,\n root: string,\n options: Options & TestOptions,\n): Promise<TestResult[]> {\n const results: TestResult[] = [];\n for (const payload of payloads) {\n await spinner.clear<void>(spinnerLbl)();\n if (!options.quiet) {\n await spinner(spinnerLbl);\n }\n /** sendTestPayload() deletes the request.body from the payload once completed. */\n const payloadCopy = Object.assign({}, payload);\n const res = await sendTestPayload(payload);\n const {\n depGraph,\n payloadPolicy,\n pkgManager,\n targetFile,\n projectName,\n foundProjectCount,\n displayTargetFile,\n dockerfilePackages,\n platform,\n scanResult,\n } = prepareResponseForParsing(\n payloadCopy,\n res as TestDependenciesResponse,\n options,\n );\n\n const ecosystem = getEcosystem(options);\n if (ecosystem && options['print-deps']) {\n await spinner.clear<void>(spinnerLbl)();\n await maybePrintDepGraph(options, depGraph);\n }\n\n const legacyRes = convertIssuesToAffectedPkgs(res);\n\n const result = await parseRes(\n depGraph,\n pkgManager,\n legacyRes as LegacyVulnApiResult,\n options,\n payload,\n payloadPolicy,\n root,\n dockerfilePackages,\n );\n\n results.push({\n ...result,\n targetFile,\n projectName,\n foundProjectCount,\n displayTargetFile,\n platform,\n scanResult,\n });\n }\n return results;\n}\n\nexport async function runTest(\n projectType: SupportedProjectTypes | undefined,\n root: string,\n options: Options & TestOptions,\n): Promise<TestResult[]> {\n const spinnerLbl = 'Querying vulnerabilities database...';\n try {\n await validateOptions(options, options.packageManager);\n const payloads = await assemblePayloads(root, options);\n return await sendAndParseResults(payloads, spinnerLbl, root, options);\n } catch (error) {\n debug('Error running test', { error });\n // handling denial from registry because of the feature flag\n // currently done for go.mod\n const isFeatureNotAllowed =\n error.code === 403 && error.message.includes('Feature not allowed');\n\n const hasFailedToGetVulnerabilities =\n error.code === 404 &&\n error.name.includes('FailedToGetVulnerabilitiesError') &&\n !error.userMessage;\n\n if (isFeatureNotAllowed) {\n throw NoSupportedManifestsFoundError([root]);\n }\n if (hasFailedToGetVulnerabilities) {\n throw FailedToGetVulnsFromUnavailableResource(root, error.code);\n }\n if (\n getEcosystem(options) === 'docker' &&\n error.statusCode === 401 &&\n [\n 'authentication required',\n '{\"details\":\"incorrect username or password\"}\\n',\n ].includes(error.message)\n ) {\n throw new DockerImageNotFoundError(root);\n }\n\n throw new FailedToRunTestError(\n error.userMessage ||\n error.message ||\n `Failed to test ${projectType} project`,\n error.code,\n );\n } finally {\n spinner.clear<void>(spinnerLbl)();\n }\n}\n\nasync function parseRes(\n depGraph: depGraphLib.DepGraph | undefined,\n pkgManager: SupportedProjectTypes | undefined,\n res: LegacyVulnApiResult,\n options: Options & TestOptions,\n payload: Payload,\n payloadPolicy: string | undefined,\n root: string,\n dockerfilePackages: any,\n): Promise<TestResult> {\n // TODO: docker doesn't have a package manager\n // so this flow will not be applicable\n // refactor to separate\n if (depGraph && pkgManager) {\n res = convertTestDepGraphResultToLegacy(\n (res as any) as TestDepGraphResponse, // Double \"as\" required by Typescript for dodgy assertions\n depGraph,\n pkgManager,\n options,\n );\n // For Node.js: inject additional information (for remediation etc.) into the response.\n if (payload.modules) {\n res.dependencyCount =\n payload.modules.numDependencies || depGraph.getPkgs().length - 1;\n if (res.vulnerabilities) {\n res.vulnerabilities.forEach((vuln) => {\n if (payload.modules && payload.modules.pluck) {\n const plucked = payload.modules.pluck(\n vuln.from,\n vuln.name,\n vuln.version,\n );\n vuln.__filename = plucked.__filename;\n vuln.shrinkwrap = plucked.shrinkwrap;\n vuln.bundled = plucked.bundled;\n\n // this is an edgecase when we're testing the directly vuln pkg\n if (vuln.from.length === 1) {\n return;\n }\n\n const parentPkg = moduleToObject(vuln.from[1]);\n const parent = payload.modules.pluck(\n vuln.from.slice(0, 2),\n parentPkg.name,\n parentPkg.version,\n );\n vuln.parentDepType = parent.depType;\n }\n });\n }\n }\n }\n // TODO: is this needed? we filter on the other side already based on policy\n // this will move to be filtered server side soon & it will support `'ignore-policy'`\n analytics.add('vulns-pre-policy', res.vulnerabilities.length);\n res.filesystemPolicy = !!payloadPolicy;\n if (!options['ignore-policy']) {\n res.policy = res.policy || (payloadPolicy as string);\n const policy = await snyk.policy.loadFromText(res.policy);\n res = policy.filter(res, root);\n }\n analytics.add('vulns', res.vulnerabilities.length);\n\n if (res.docker && dockerfilePackages) {\n res.vulnerabilities = res.vulnerabilities.map((vuln) => {\n const dockerfilePackage = dockerfilePackages[vuln.name.split('/')[0]];\n if (dockerfilePackage) {\n (vuln as DockerIssue).dockerfileInstruction =\n dockerfilePackage.installCommand;\n }\n (vuln as DockerIssue).dockerBaseImage = res.docker!.baseImage;\n return vuln;\n });\n }\n if (\n options.docker &&\n res.docker?.baseImage &&\n options['exclude-base-image-vulns']\n ) {\n const filteredVulns = res.vulnerabilities.filter(\n (vuln) => (vuln as DockerIssue).dockerfileInstruction,\n );\n // `exclude-base-image-vulns` might have left us with no vulns, so `ok` is now `true`\n if (\n res.vulnerabilities.length !== 0 &&\n filteredVulns.length === 0 &&\n !res.ok\n ) {\n res.ok = true;\n }\n res.vulnerabilities = filteredVulns;\n }\n\n res.uniqueCount = countUniqueVulns(res.vulnerabilities);\n\n return res;\n}\n\nfunction sendTestPayload(\n payload: Payload,\n): Promise<\n LegacyVulnApiResult | TestDepGraphResponse | TestDependenciesResponse\n> {\n const payloadBody = payload.body as any;\n const filesystemPolicy =\n payload.body && !!(payloadBody?.policy || payloadBody?.scanResult?.policy);\n return new Promise((resolve, reject) => {\n makeRequest(payload, (error, res, body) => {\n if (error) {\n return reject(error);\n }\n if (res.statusCode !== 200) {\n const err = handleTestHttpErrorResponse(res, body);\n return reject(err);\n }\n\n body.filesystemPolicy = filesystemPolicy;\n resolve(body);\n });\n });\n}\n\nfunction handleTestHttpErrorResponse(res, body) {\n const { statusCode } = res;\n let err;\n const userMessage = body && body.userMessage;\n switch (statusCode) {\n case 401:\n case 403:\n err = AuthFailedError(userMessage, statusCode);\n err.innerError = body.stack;\n break;\n case 404:\n err = new NotFoundError(userMessage);\n err.innerError = body.stack;\n break;\n case 405:\n err = new UnsupportedFeatureFlagError('reachableVulns');\n err.innerError = body.stack;\n break;\n case 500:\n err = new InternalServerError(userMessage);\n err.innerError = body.stack;\n break;\n default:\n err = new FailedToGetVulnerabilitiesError(userMessage, statusCode);\n err.innerError = body.error;\n }\n return err;\n}\n\nfunction assemblePayloads(\n root: string,\n options: Options & TestOptions,\n): Promise<Payload[]> {\n let isLocal;\n if (options.docker) {\n isLocal = true;\n } else {\n // TODO: Refactor this check so we don't require files when tests are using mocks\n isLocal = fs.existsSync(root);\n }\n analytics.add('local', isLocal);\n\n const ecosystem = getEcosystem(options);\n if (ecosystem) {\n return assembleEcosystemPayloads(ecosystem, options);\n }\n if (isLocal) {\n return assembleLocalPayloads(root, options);\n }\n return assembleRemotePayloads(root, options);\n}\n\n// Payload to send to the Registry for scanning a package from the local filesystem.\nasync function assembleLocalPayloads(\n root,\n options: Options & TestOptions & PolicyOptions,\n): Promise<Payload[]> {\n // For --all-projects packageManager is yet undefined here. Use 'all'\n let analysisTypeText = 'all dependencies for ';\n if (options.docker) {\n analysisTypeText = 'docker dependencies for ';\n } else if (options.packageManager) {\n analysisTypeText = options.packageManager + ' dependencies for ';\n }\n\n const spinnerLbl =\n 'Analyzing ' +\n analysisTypeText +\n (path.relative('.', path.join(root, options.file || '')) ||\n path.relative('..', '.') + ' project dir');\n\n try {\n const payloads: Payload[] = [];\n await spinner.clear<void>(spinnerLbl)();\n if (!options.quiet) {\n await spinner(spinnerLbl);\n }\n\n const deps = await getDepsFromPlugin(root, options);\n const failedResults = (deps as MultiProjectResultCustom).failedResults;\n if (failedResults?.length) {\n await spinner.clear<void>(spinnerLbl)();\n if (!options.json && !options.quiet) {\n console.warn(\n chalk.bold.red(\n `${icon.ISSUE} ${failedResults.length}/${failedResults.length +\n deps.scannedProjects\n .length} potential projects failed to get dependencies.`,\n ),\n );\n failedResults.forEach((f) => {\n if (f.targetFile) {\n console.warn(theme.color.status.error(`${f.targetFile}:`));\n }\n console.warn(theme.color.status.error(` ${f.errMessage}`));\n });\n }\n debug(\n 'getDepsFromPlugin returned failed results, cannot run test/monitor',\n failedResults,\n );\n if (options['fail-fast']) {\n throw new FailedToRunTestError(\n errorMessageWithRetry('Your test request could not be completed.'),\n );\n }\n }\n analytics.add('pluginName', deps.plugin.name);\n const javaVersion = get(\n deps.plugin,\n 'meta.versionBuildInfo.metaBuildVersion.javaVersion',\n null,\n );\n const mvnVersion = get(\n deps.plugin,\n 'meta.versionBuildInfo.metaBuildVersion.mvnVersion',\n null,\n );\n const sbtVersion = get(\n deps.plugin,\n 'meta.versionBuildInfo.metaBuildVersion.sbtVersion',\n null,\n );\n if (javaVersion) {\n analytics.add('javaVersion', javaVersion);\n }\n if (mvnVersion) {\n analytics.add('mvnVersion', mvnVersion);\n }\n if (sbtVersion) {\n analytics.add('sbtVersion', sbtVersion);\n }\n\n for (const scannedProject of deps.scannedProjects) {\n if (!scannedProject.depTree && !scannedProject.depGraph) {\n debug(\n 'scannedProject is missing depGraph or depTree, cannot run test/monitor',\n );\n throw new FailedToRunTestError(\n errorMessageWithRetry('Your test request could not be completed.'),\n );\n }\n\n // prefer dep-graph fallback on dep tree\n // TODO: clean up once dep-graphs only\n const pkg:\n | DepTree\n | depGraphLib.DepGraph\n | undefined = scannedProject.depGraph\n ? scannedProject.depGraph\n : scannedProject.depTree;\n\n if (options['print-deps']) {\n if (scannedProject.depGraph) {\n await spinner.clear<void>(spinnerLbl)();\n maybePrintDepGraph(options, pkg as depGraphLib.DepGraph);\n } else {\n await spinner.clear<void>(spinnerLbl)();\n maybePrintDepTree(options, pkg as DepTree);\n }\n }\n const project = scannedProject as ScannedProjectCustom;\n const packageManager = extractPackageManager(project, deps, options);\n\n if ((pkg as DepTree).docker) {\n const baseImageFromDockerfile = (pkg as DepTree).docker.baseImage;\n if (!baseImageFromDockerfile && options['base-image']) {\n (pkg as DepTree).docker.baseImage = options['base-image'];\n }\n\n if (baseImageFromDockerfile && deps.plugin && deps.plugin.imageLayers) {\n analytics.add('BaseImage', baseImageFromDockerfile);\n analytics.add('imageLayers', deps.plugin.imageLayers);\n }\n }\n\n // todo: normalize what target file gets used across plugins and functions\n const targetFile =\n scannedProject.targetFile || deps.plugin.targetFile || options.file;\n\n // Forcing options.path to be a string as pathUtil requires is to be stringified\n const targetFileRelativePath = targetFile\n ? pathUtil.resolve(\n pathUtil.resolve(`${options.path || root}`),\n targetFile,\n )\n : '';\n\n let targetFileDir;\n\n if (targetFileRelativePath) {\n const { dir } = path.parse(targetFileRelativePath);\n targetFileDir = dir;\n }\n\n const policy = await findAndLoadPolicy(\n root,\n options.docker ? 'docker' : packageManager!,\n options,\n // TODO: fix this and send only send when we used resolve-deps for node\n // it should be a ExpandedPkgTree type instead\n pkg,\n targetFileDir,\n );\n\n analytics.add('packageManager', packageManager);\n if (scannedProject.depGraph) {\n const depGraph = pkg as depGraphLib.DepGraph;\n addPackageAnalytics(depGraph.rootPkg.name, depGraph.rootPkg.version!);\n }\n if (scannedProject.depTree) {\n const depTree = pkg as DepTree;\n addPackageAnalytics(depTree.name!, depTree.version!);\n }\n\n let target: GitTarget | ContainerTarget | null;\n if (scannedProject.depGraph) {\n target = await projectMetadata.getInfo(scannedProject, options);\n } else {\n target = await projectMetadata.getInfo(\n scannedProject,\n options,\n pkg as DepTree,\n );\n }\n\n const originalProjectName = scannedProject.depGraph\n ? (pkg as depGraphLib.DepGraph).rootPkg.name\n : (pkg as DepTree).name;\n\n const body: PayloadBody = {\n // WARNING: be careful changing this as it affects project uniqueness\n targetFile: project.plugin.targetFile,\n\n // TODO: Remove relativePath prop once we gather enough ruby related logs\n targetFileRelativePath: `${targetFileRelativePath}`, // Forcing string\n targetReference: options['target-reference'],\n projectNameOverride: options.projectName,\n originalProjectName,\n policy: policy ? policy.toString() : undefined,\n foundProjectCount: await getExtraProjectCount(root, options, deps),\n displayTargetFile: targetFile,\n docker: (pkg as DepTree).docker,\n hasDevDependencies: (pkg as any).hasDevDependencies,\n target,\n };\n\n let depGraph: depGraphLib.DepGraph;\n if (scannedProject.depGraph) {\n depGraph = scannedProject.depGraph;\n } else {\n // Graphs are more compact and robust representations.\n // Legacy parts of the code are still using trees, but will eventually be fully migrated.\n debug('converting dep-tree to dep-graph', {\n name: (pkg as DepTree).name,\n targetFile: scannedProject.targetFile || options.file,\n });\n depGraph = await depGraphLib.legacy.depTreeToGraph(\n pkg as DepTree,\n packageManager!,\n );\n debug('done converting dep-tree to dep-graph', {\n uniquePkgsCount: depGraph.getPkgs().length,\n });\n }\n\n const pruneIsRequired = options.pruneRepeatedSubdependencies;\n\n if (packageManager) {\n depGraph = await pruneGraph(depGraph, packageManager, pruneIsRequired);\n }\n body.depGraph = depGraph;\n\n if (\n options.reachableVulns &&\n (scannedProject.callGraph as CallGraphError)?.message\n ) {\n const err = scannedProject.callGraph as CallGraphError;\n const analyticsError = err.innerError || err;\n analytics.add('callGraphError', {\n errorType: analyticsError.constructor?.name,\n message: abridgeErrorMessage(\n analyticsError.message.toString(),\n ANALYTICS_PAYLOAD_MAX_LENGTH,\n ),\n });\n alerts.registerAlerts([\n {\n type: 'error',\n name: 'missing-call-graph',\n msg: err.message,\n },\n ]);\n } else if (scannedProject.callGraph) {\n const {\n callGraph,\n nodeCount,\n edgeCount,\n } = serializeCallGraphWithMetrics(\n scannedProject.callGraph as CallGraph,\n );\n debug(\n `Adding call graph to payload, node count: ${nodeCount}, edge count: ${edgeCount}`,\n );\n\n const callGraphMetrics = get(deps.plugin, 'meta.callGraphMetrics', {});\n analytics.add('callGraphMetrics', {\n callGraphEdgeCount: edgeCount,\n callGraphNodeCount: nodeCount,\n ...callGraphMetrics,\n });\n body.callGraph = callGraph;\n }\n const reqUrl =\n config.API +\n (options.testDepGraphDockerEndpoint ||\n options.vulnEndpoint ||\n '/test-dep-graph');\n const payload: Payload = {\n method: 'POST',\n url: reqUrl,\n json: true,\n headers: {\n 'x-is-ci': isCI(),\n authorization: getAuthHeader(),\n },\n qs: common.assembleQueryString(options),\n body,\n };\n\n if (packageManager && ['yarn', 'npm'].indexOf(packageManager) !== -1) {\n const isLockFileBased =\n targetFile &&\n (targetFile.endsWith('package-lock.json') ||\n targetFile.endsWith('yarn.lock'));\n if (!isLockFileBased || options.traverseNodeModules) {\n payload.modules = pkg as DepTreeFromResolveDeps; // See the output of resolve-deps\n }\n }\n payloads.push(payload);\n }\n return payloads;\n } finally {\n await spinner.clear<void>(spinnerLbl)();\n }\n}\n\n// Payload to send to the Registry for scanning a remote package.\nasync function assembleRemotePayloads(root, options): Promise<Payload[]> {\n const pkg = moduleToObject(root);\n debug('testing remote: %s', pkg.name + '@' + pkg.version);\n addPackageAnalytics(pkg.name, pkg.version);\n const encodedName = encodeURIComponent(pkg.name + '@' + pkg.version);\n // options.vulnEndpoint is only used by `snyk protect` (i.e. local filesystem tests)\n const url = `${config.API}${options.vulnEndpoint ||\n `/vuln/${options.packageManager}`}/${encodedName}`;\n return [\n {\n method: 'GET',\n url,\n qs: common.assembleQueryString(options),\n json: true,\n headers: {\n 'x-is-ci': isCI(),\n authorization: getAuthHeader(),\n },\n },\n ];\n}\n\nfunction addPackageAnalytics(name: string, version: string): void {\n analytics.add('packageName', name);\n analytics.add('packageVersion', version);\n analytics.add('package', name + '@' + version);\n}\n\nfunction countUniqueVulns(vulns: AnnotatedIssue[]): number {\n const seen = {};\n for (const curr of vulns) {\n seen[curr.id] = true;\n }\n return Object.keys(seen).length;\n}\n","import * as childProcess from 'child_process';\n\nexport function execute(\n command: string,\n args: string[],\n options?: { cwd: string | undefined },\n): Promise<string> {\n const spawnOptions: childProcess.SpawnOptions = { shell: true };\n if (options && options.cwd) {\n spawnOptions.cwd = options.cwd;\n }\n\n return new Promise((resolve, reject) => {\n let stdout = '';\n let stderr = '';\n\n const proc = childProcess.spawn(command, args, spawnOptions);\n if (proc.stdout) {\n proc.stdout.on('data', (data) => {\n stdout += data;\n });\n }\n if (proc.stderr) {\n proc.stderr.on('data', (data) => {\n stderr += data;\n });\n }\n\n proc.on('close', (code) => {\n if (code !== 0) {\n return reject(stdout || stderr);\n }\n resolve(stdout || stderr);\n });\n });\n}\n","const snykConfig = require('./config');\n\n// This module is kind of \"world object\" that is used to indirectly import modules.\n// This also introduces some circular imports.\n\n// TODO(kyegupov): untangle this, resolve circular imports, convert to Typescript\n\nconst snyk = {};\nmodule.exports = snyk;\n\nsnyk.id = snykConfig.id;\n\nconst apiToken = require('./api-token');\n\n// make snyk.api *always* get the latest api token from the config store\nObject.defineProperty(snyk, 'api', {\n enumerable: true,\n configurable: true,\n get: function() {\n return apiToken.api();\n },\n set: function(value) {\n snykConfig.api = value;\n },\n});\n\nsnyk.test = require('./snyk-test');\nsnyk.policy = require('snyk-policy');\n\n// this is the user config, and not the internal config\nsnyk.config = require('./user-config').config;\n","const gemfile = require('@snyk/gemfile');\n\nmodule.exports = gemfileLockToDependencies;\n\nconst detectCycles = (dep, chain) => {\n if (chain.indexOf(dep) >= 0) {\n const error = Error('Cyclic dependency detected in lockfile');\n const UNPROCESSABLE_ENTITY = 422;\n error.code = UNPROCESSABLE_ENTITY;\n error.meta = { dep, chain };\n throw error;\n }\n};\n\nconst gemfileReducer = (lockFile, allDeps, ancestors) => (deps, dep) => {\n const gemspec = lockFile.specs[dep];\n // If for some reason a dependency isn't included in the specs then its\n // better to just ignore it (otherwise all processing fails).\n // This happens for bundler itself, it isn't included in the Gemfile.lock\n // specs, even if its a dependency! (and that isn't documented anywhere)\n if (gemspec) {\n detectCycles(dep, ancestors);\n if (allDeps.has(dep)) {\n deps[dep] = allDeps.get(dep);\n } else {\n deps[dep] = {\n name: dep,\n version: gemspec.version,\n };\n allDeps.set(dep, deps[dep]);\n deps[dep].dependencies = Object.keys(gemspec)\n .filter((k) => k !== 'version')\n .reduce(gemfileReducer(lockFile, allDeps, ancestors.concat([dep])), {});\n }\n }\n return deps;\n};\n\nfunction gemfileLockToDependencies(fileContents) {\n const lockFile = gemfile.interpret(fileContents, true);\n\n return (\n Object.keys(lockFile.dependencies || {})\n // this is required to sanitise git deps with no exact version\n // listed as `rspec!`\n .map((dep) => dep.match(/[^!]+/)[0])\n .reduce(gemfileReducer(lockFile, new Map(), []), {})\n );\n}\n","module.exports = test;\n\nconst detect = require('../detect');\nconst { runTest } = require('./run-test');\nconst chalk = require('chalk');\nconst pm = require('../package-managers');\nconst { UnsupportedPackageManagerError } = require('../errors');\nconst { isMultiProjectScan } = require('../is-multi-project-scan');\n\nasync function test(root, options, callback) {\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (!options) {\n options = {};\n }\n const promise = executeTest(root, options);\n if (callback) {\n promise\n .then((res) => {\n callback(null, res);\n })\n .catch(callback);\n }\n return promise;\n}\n\nasync function executeTest(root, options) {\n try {\n if (!options.allProjects) {\n options.packageManager = detect.detectPackageManager(root, options);\n }\n return run(root, options).then((results) => {\n for (const res of results) {\n if (!res.packageManager) {\n res.packageManager = options.packageManager;\n }\n }\n if (results.length === 1) {\n // Return only one result if only one found as this is the default usecase\n return results[0];\n }\n // For gradle, yarnWorkspaces, allProjects we may be returning more than one result\n return results;\n });\n } catch (error) {\n return Promise.reject(\n chalk.red.bold(error.message ? error.message : error),\n );\n }\n}\n\nfunction run(root, options) {\n const projectType = options.packageManager;\n validateProjectType(options, projectType);\n return runTest(projectType, root, options);\n}\n\nfunction validateProjectType(options, projectType) {\n if (\n !(\n options.docker ||\n isMultiProjectScan(options) ||\n pm.SUPPORTED_PACKAGE_MANAGER_NAME[projectType]\n )\n ) {\n throw new UnsupportedPackageManagerError(projectType);\n }\n}\n"],"names":[],"sourceRoot":""}
|