JezK
Edit File: audit.js.map
{"version":3,"file":"audit.js","names":["zlib","require","gzip","promisify","setFlags","commander","description","option","OWNED_DEPENDENCY_TYPES","join","groups","split","hasWrapper","args","run","config","reporter","flags","DEFAULT_LOG_LEVEL","audit","Audit","level","Lockfile","fromDirectory","lockfileFolder","lockfile","install","Install","fetchRequestFromCwd","manifest","requests","patterns","workspaceLayout","resolver","init","performAudit","linker","vulnerabilities","EXIT_INFO","EXIT_LOW","EXIT_MODERATE","EXIT_HIGH","EXIT_CRITICAL","exitCode","info","low","moderate","high","critical","summary","report","options","auditNode","hoistedNodes","transitiveDevDeps","node","pkg","requires","Object","assign","dependencies","optionalDependencies","keys","name","version","integrity","_remote","dev","has","children","_mapHoistedNodes","hoistedTrees","requiresGroups","map","group","auditTree","undefined","remove","metadata","registry","YARN_REGISTRY","verbose","JSON","stringify","requestBody","requestManager","request","url","method","body","headers","Accept","response","responseJson","parse","Error","workspaceAggregatorName","virtualManifestName","workspaceManifest","workspaces","devDependencies","_insertWorkspacePackagesIntoManifest","getTransitiveDevDependencies","hoistedTreeBuilder","_mapHoistedTreesToAuditTree","_fetchAudit","auditData","auditSummary","startLoggingAt","Math","max","severityLevels","indexOf","reportAdvisory","resolution","advisory","advisories","id","toString","severity","auditAdvisory","length","actions","forEach","action","resolves"],"sourceRoot":"../../../src","sources":["cli/commands/audit.js"],"sourcesContent":["/* @flow */\n\nimport type Config from '../../config.js';\nimport type PackageResolver from '../../package-resolver.js';\nimport type PackageLinker from '../../package-linker.js';\nimport type {Reporter} from '../../reporters/index.js';\nimport type {HoistedTrees} from '../../hoisted-tree-builder.js';\n\nimport {promisify} from '../../util/promise.js';\nimport {buildTree as hoistedTreeBuilder} from '../../hoisted-tree-builder';\nimport {getTransitiveDevDependencies} from '../../util/get-transitive-dev-dependencies';\nimport {Install} from './install.js';\nimport Lockfile from '../../lockfile';\nimport {OWNED_DEPENDENCY_TYPES, YARN_REGISTRY} from '../../constants';\n\nconst zlib = require('zlib');\nconst gzip = promisify(zlib.gzip);\n\nexport type AuditOptions = {\n groups: Array<string>,\n level?: string,\n};\n\nexport type AuditNode = {\n version: ?string,\n integrity: ?string,\n requires: Object,\n dependencies: {[string]: AuditNode},\n dev: boolean,\n};\n\nexport type AuditTree = AuditNode & {\n install: Array<string>,\n remove: Array<string>,\n metadata: Object,\n};\n\nexport type AuditVulnerabilityCounts = {\n info: number,\n low: number,\n moderate: number,\n high: number,\n critical: number,\n};\n\nexport type AuditResolution = {\n id: number,\n path: string,\n dev: boolean,\n optional: boolean,\n bundled: boolean,\n};\n\nexport type AuditAction = {\n action: string,\n module: string,\n target: string,\n isMajor: boolean,\n resolves: Array<AuditResolution>,\n};\n\nexport type AuditAdvisory = {\n findings: [\n {\n version: string,\n paths: Array<string>,\n dev: boolean,\n optional: boolean,\n bundled: boolean,\n },\n ],\n id: number,\n created: string,\n updated: string,\n deleted: ?boolean,\n title: string,\n found_by: {\n name: string,\n },\n reported_by: {\n name: string,\n },\n module_name: string,\n cves: Array<string>,\n vulnerable_versions: string,\n patched_versions: string,\n overview: string,\n recommendation: string,\n references: string,\n access: string,\n severity: string,\n cwe: string,\n metadata: {\n module_type: string,\n exploitability: number,\n affected_components: string,\n },\n url: string,\n};\n\nexport type AuditMetadata = {\n vulnerabilities: AuditVulnerabilityCounts,\n dependencies: number,\n devDependencies: number,\n optionalDependencies: number,\n totalDependencies: number,\n};\n\nexport type AuditReport = {\n actions: Array<AuditAction>,\n advisories: {[string]: AuditAdvisory},\n muted: Array<Object>,\n metadata: AuditMetadata,\n};\n\nexport type AuditActionRecommendation = {\n cmd: string,\n isBreaking: boolean,\n action: AuditAction,\n};\n\nexport function setFlags(commander: Object) {\n commander.description('Checks for known security issues with the installed packages.');\n commander.option('--summary', 'Only print the summary.');\n commander.option(\n '--groups <group_name> [<group_name> ...]',\n `Only audit dependencies from listed groups. Default: ${OWNED_DEPENDENCY_TYPES.join(', ')}`,\n groups => groups.split(' '),\n OWNED_DEPENDENCY_TYPES,\n );\n commander.option(\n '--level <severity>',\n `Only print advisories with severity greater than or equal to one of the following: \\\n info|low|moderate|high|critical. Default: info`,\n 'info',\n );\n}\n\nexport function hasWrapper(commander: Object, args: Array<string>): boolean {\n return true;\n}\n\nexport async function run(config: Config, reporter: Reporter, commander: Object, flags: Object, args: Array<string>): Promise<number> {\n const DEFAULT_LOG_LEVEL = 'info';\n const audit = new Audit(config, reporter, {\n groups: flags.groups || OWNED_DEPENDENCY_TYPES,\n level: flags.level || DEFAULT_LOG_LEVEL,\n });\n const lockfile = await Lockfile.fromDirectory(config.lockfileFolder, reporter);\n const install = new Install({}, config, reporter, lockfile);\n const {manifest, requests, patterns, workspaceLayout} = await install.fetchRequestFromCwd();\n await install.resolver.init(requests, {\n workspaceLayout,\n });\n\n const vulnerabilities = await audit.performAudit(manifest, lockfile, install.resolver, install.linker, patterns);\n\n const EXIT_INFO = 1;\n const EXIT_LOW = 2;\n const EXIT_MODERATE = 4;\n const EXIT_HIGH = 8;\n const EXIT_CRITICAL = 16;\n\n const exitCode =\n (vulnerabilities.info ? EXIT_INFO : 0) +\n (vulnerabilities.low ? EXIT_LOW : 0) +\n (vulnerabilities.moderate ? EXIT_MODERATE : 0) +\n (vulnerabilities.high ? EXIT_HIGH : 0) +\n (vulnerabilities.critical ? EXIT_CRITICAL : 0);\n\n if (flags.summary) {\n audit.summary();\n } else {\n audit.report();\n }\n\n return exitCode;\n}\n\nexport default class Audit {\n severityLevels = ['info', 'low', 'moderate', 'high', 'critical'];\n\n constructor(config: Config, reporter: Reporter, options: AuditOptions) {\n this.config = config;\n this.reporter = reporter;\n this.options = options;\n }\n\n config: Config;\n reporter: Reporter;\n options: AuditOptions;\n auditData: AuditReport;\n\n _mapHoistedNodes(auditNode: AuditNode, hoistedNodes: HoistedTrees, transitiveDevDeps: Set<string>) {\n for (const node of hoistedNodes) {\n const pkg = node.manifest.pkg;\n const requires = Object.assign({}, pkg.dependencies || {}, pkg.optionalDependencies || {});\n for (const name of Object.keys(requires)) {\n if (!requires[name]) {\n requires[name] = '*';\n }\n }\n auditNode.dependencies[node.name] = {\n version: node.version,\n integrity: pkg._remote ? pkg._remote.integrity || '' : '',\n requires,\n dependencies: {},\n dev: transitiveDevDeps.has(`${node.name}@${node.version}`),\n };\n if (node.children) {\n this._mapHoistedNodes(auditNode.dependencies[node.name], node.children, transitiveDevDeps);\n }\n }\n }\n\n _mapHoistedTreesToAuditTree(manifest: Object, hoistedTrees: HoistedTrees, transitiveDevDeps: Set<string>): AuditTree {\n const requiresGroups = this.options.groups.map(function(group: string): Object {\n return manifest[group] || {};\n });\n\n const auditTree: AuditTree = {\n name: manifest.name || undefined,\n version: manifest.version || undefined,\n install: [],\n remove: [],\n metadata: {\n //TODO: What do we send here? npm sends npm version, node version, etc.\n },\n requires: Object.assign({}, ...requiresGroups),\n integrity: undefined,\n dependencies: {},\n dev: false,\n };\n\n this._mapHoistedNodes(auditTree, hoistedTrees, transitiveDevDeps);\n return auditTree;\n }\n\n async _fetchAudit(auditTree: AuditTree): Object {\n let responseJson;\n const registry = YARN_REGISTRY;\n this.reporter.verbose(`Audit Request: ${JSON.stringify(auditTree, null, 2)}`);\n const requestBody = await gzip(JSON.stringify(auditTree));\n const response = await this.config.requestManager.request({\n url: `${registry}/-/npm/v1/security/audits`,\n method: 'POST',\n body: requestBody,\n headers: {\n 'Content-Encoding': 'gzip',\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n });\n\n try {\n responseJson = JSON.parse(response);\n } catch (ex) {\n throw new Error(`Unexpected audit response (Invalid JSON): ${response}`);\n }\n if (!responseJson.metadata) {\n throw new Error(`Unexpected audit response (Missing Metadata): ${JSON.stringify(responseJson, null, 2)}`);\n }\n this.reporter.verbose(`Audit Response: ${JSON.stringify(responseJson, null, 2)}`);\n return responseJson;\n }\n\n _insertWorkspacePackagesIntoManifest(manifest: Object, resolver: PackageResolver) {\n if (resolver.workspaceLayout) {\n const workspaceAggregatorName = resolver.workspaceLayout.virtualManifestName;\n const workspaceManifest = resolver.workspaceLayout.workspaces[workspaceAggregatorName].manifest;\n\n manifest.dependencies = Object.assign(manifest.dependencies || {}, workspaceManifest.dependencies);\n manifest.devDependencies = Object.assign(manifest.devDependencies || {}, workspaceManifest.devDependencies);\n manifest.optionalDependencies = Object.assign(\n manifest.optionalDependencies || {},\n workspaceManifest.optionalDependencies,\n );\n }\n }\n\n async performAudit(\n manifest: Object,\n lockfile: Lockfile,\n resolver: PackageResolver,\n linker: PackageLinker,\n patterns: Array<string>,\n ): Promise<AuditVulnerabilityCounts> {\n this._insertWorkspacePackagesIntoManifest(manifest, resolver);\n const transitiveDevDeps = getTransitiveDevDependencies(manifest, resolver.workspaceLayout, lockfile);\n const hoistedTrees = await hoistedTreeBuilder(resolver, linker, patterns);\n const auditTree = this._mapHoistedTreesToAuditTree(manifest, hoistedTrees, transitiveDevDeps);\n this.auditData = await this._fetchAudit(auditTree);\n return this.auditData.metadata.vulnerabilities;\n }\n\n summary() {\n if (!this.auditData) {\n return;\n }\n this.reporter.auditSummary(this.auditData.metadata);\n }\n\n report() {\n if (!this.auditData) {\n return;\n }\n\n const startLoggingAt: number = Math.max(0, this.severityLevels.indexOf(this.options.level));\n\n const reportAdvisory = (resolution: AuditResolution) => {\n const advisory = this.auditData.advisories[resolution.id.toString()];\n\n if (this.severityLevels.indexOf(advisory.severity) >= startLoggingAt) {\n this.reporter.auditAdvisory(resolution, advisory);\n }\n };\n\n if (Object.keys(this.auditData.advisories).length !== 0) {\n // let printedManualReviewHeader = false;\n\n this.auditData.actions.forEach(action => {\n action.resolves.forEach(reportAdvisory);\n\n /* The following block has been temporarily removed\n * because the actions returned by npm are not valid for yarn.\n * Removing this action reporting until we can come up with a way\n * to correctly resolve issues.\n */\n // if (action.action === 'update' || action.action === 'install') {\n // // these advisories can be resolved automatically by running a yarn command\n // const recommendation: AuditActionRecommendation = {\n // cmd: `yarn upgrade ${action.module}@${action.target}`,\n // isBreaking: action.isMajor,\n // action,\n // };\n // this.reporter.auditAction(recommendation);\n // action.resolves.forEach(reportAdvisory);\n // }\n\n // if (action.action === 'review') {\n // // these advisories cannot be resolved automatically and require manual review\n // if (!printedManualReviewHeader) {\n // this.reporter.auditManualReview();\n // }\n // printedManualReviewHeader = true;\n // action.resolves.forEach(reportAdvisory);\n // }\n });\n }\n\n this.summary();\n }\n}\n"],"mappings":"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"}