snyk 1.827.0 → 1.828.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.
package/dist/cli/875.index.js
CHANGED
|
@@ -10,7 +10,7 @@ exports.modules = {
|
|
|
10
10
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
11
11
|
const version_1 = __webpack_require__(38217);
|
|
12
12
|
async function version() {
|
|
13
|
-
let version =
|
|
13
|
+
let version = version_1.getVersion();
|
|
14
14
|
if (version_1.isStandaloneBuild()) {
|
|
15
15
|
version += ' (standalone)';
|
|
16
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"875.index.js","mappings":";;;;;;;;;;AAAA,6CAAkE;AAEnD,KAAK,UAAU,OAAO;IACnC,IAAI,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"875.index.js","mappings":";;;;;;;;;;AAAA,6CAAkE;AAEnD,KAAK,UAAU,OAAO;IACnC,IAAI,OAAO,GAAG,oBAAU,EAAE,CAAC;IAC3B,IAAI,2BAAiB,EAAE,EAAE;QACvB,OAAO,IAAI,eAAe,CAAC;KAC5B;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAND,0BAMC","sources":["webpack://snyk/./src/cli/commands/version.ts"],"sourcesContent":["import { getVersion, isStandaloneBuild } from '../../lib/version';\n\nexport default async function version() {\n let version = getVersion();\n if (isStandaloneBuild()) {\n version += ' (standalone)';\n }\n return version;\n}\n"],"names":[],"sourceRoot":""}
|
package/dist/cli/959.index.js
CHANGED
|
@@ -1471,7 +1471,7 @@ function sendWizardAnalyticsData(answers) {
|
|
|
1471
1471
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
1472
1472
|
const version_1 = __webpack_require__(38217);
|
|
1473
1473
|
async function version() {
|
|
1474
|
-
let version =
|
|
1474
|
+
let version = version_1.getVersion();
|
|
1475
1475
|
if (version_1.isStandaloneBuild()) {
|
|
1476
1476
|
version += ' (standalone)';
|
|
1477
1477
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"959.index.js","mappings":"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","sources":["webpack://snyk/./src/cli/commands/auth/is-authed.ts","webpack://snyk/./src/cli/commands/protect/prompts.ts","webpack://snyk/./src/cli/commands/protect/tasks.ts","webpack://snyk/./src/cli/commands/protect/wizard.ts","webpack://snyk/./src/cli/commands/version.ts","webpack://snyk/./src/lib/authorization.ts","webpack://snyk/./src/lib/errors/misconfigured-auth-in-ci-error.ts"],"sourcesContent":["import * as snyk from '../../../lib';\nimport config from '../../../lib/config';\nimport { makeRequest } from '../../../lib/request';\n\nexport function isAuthed() {\n const token = snyk.config.get('api');\n return verifyAPI(token).then((res: any) => {\n return res.body.ok;\n });\n}\n\nexport function verifyAPI(api) {\n const payload = {\n body: {\n api,\n },\n method: 'POST',\n url: config.API + '/verify/token',\n json: true,\n };\n\n return new Promise((resolve, reject) => {\n makeRequest(payload, (error, res, body) => {\n if (error) {\n return reject(error);\n }\n\n resolve({\n res,\n body,\n });\n });\n });\n}\n","import { PATH_SEPARATOR } from '../../../lib/constants';\n\nexport {\n getUpdatePrompts,\n getPatchPrompts,\n getIgnorePrompts,\n getPrompts,\n nextSteps,\n startOver,\n};\n\nconst cloneDeep = require('lodash.clonedeep');\nconst get = require('lodash.get');\nimport * as semver from 'semver';\nimport { format as fmt } from 'util';\nimport * as debugModule from 'debug';\nconst protect = require('../../../lib/protect');\nimport { parsePackageString as moduleToObject } from 'snyk-module';\nimport config from '../../../lib/config';\nimport * as snykPolicy from 'snyk-policy';\nimport chalk from 'chalk';\nimport { icon, color } from '../../../lib/theme';\nimport { AnnotatedIssue, SEVERITY } from '../../../lib/snyk-test/legacy';\nimport { colorTextBySeverity } from '../../../lib/snyk-test/common';\nimport { titleCaseText } from '../../../lib/formatters/legacy-format-issue';\n\nconst debug = debugModule('snyk');\n\nconst ignoreDisabledReasons = {\n notAdmin: 'Set to ignore (only administrators can ignore issues)',\n disregardFilesystemIgnores:\n 'Set to ignore (ignoring via the CLI is not enabled for this organization)',\n};\n\n// via http://stackoverflow.com/a/4760279/22617\nfunction sort(prop) {\n let sortOrder = 1;\n if (prop[0] === '-') {\n sortOrder = -1;\n prop = prop.substr(1);\n }\n\n return (a, b) => {\n const result = a[prop] < b[prop] ? -1 : a[prop] > b[prop] ? 1 : 0;\n return result * sortOrder;\n };\n}\n\nfunction createSeverityBasedIssueHeading(msg: string, severity: SEVERITY) {\n // Example: ✗ Medium severity vulnerability found in xmldom\n return colorTextBySeverity(severity, msg);\n}\n\nfunction sortUpgradePrompts(a, b) {\n let res = 0;\n\n // first sort by module affected\n if (!a.from[1]) {\n return -1;\n }\n\n if (!b.from[1]) {\n return 1;\n }\n\n const pa = moduleToObject(a.from[1]);\n const pb = moduleToObject(b.from[1]);\n res = sort('name')(pa, pb);\n if (res !== 0) {\n return res;\n }\n\n // we should have the same module, so the depth should be the same\n if (a.upgradePath[1] && b.upgradePath[1]) {\n // put upgrades ahead of patches\n if (b.upgradePath[1] === false) {\n return 1;\n }\n const pua = moduleToObject(a.upgradePath[1]);\n const pub = moduleToObject(b.upgradePath[1]);\n\n res = semver.compare(pua.version, pub.version) * -1;\n\n if (res !== 0) {\n return res;\n }\n } else {\n if (a.upgradePath[1]) {\n return -1;\n }\n\n if (b.upgradePath[1]) {\n return 1;\n }\n\n // if no upgrade, then hopefully a patch\n res = sort('publicationTime')(b, a);\n }\n\n return res;\n}\n\nfunction sortPatchPrompts(a, b) {\n let res = 0;\n\n // first sort by module affected\n const afrom = a.from.slice(1).pop();\n const bfrom = b.from.slice(1).pop();\n\n if (!afrom) {\n return -1;\n }\n\n if (!bfrom[1]) {\n return 1;\n }\n\n const pa = moduleToObject(afrom);\n const pb = moduleToObject(bfrom);\n res = sort('name')(pa, pb);\n if (res !== 0) {\n return res;\n }\n\n // if no upgrade, then hopefully a patch\n res = sort('publicationTime')(b, a);\n\n return res;\n}\n\nfunction stripInvalidPatches<T extends AnnotatedIssue>(vulns: T[]): T[] {\n // strip the irrelevant patches from the vulns at the same time, collect\n // the unique package vulns\n return vulns.map((vuln) => {\n // strip verbose meta\n delete vuln.description;\n delete vuln.credit;\n\n if (vuln.patches) {\n vuln.patches = vuln.patches.filter((patch) => {\n return semver.satisfies(vuln.version, patch.version);\n });\n\n // sort by patchModification, then pick the latest one\n vuln.patches = vuln.patches\n .sort((a, b) => {\n return b.modificationTime < a.modificationTime ? -1 : 1;\n })\n .slice(0, 1);\n\n // FIXME hack to give all the patches IDs if they don't already\n if (vuln.patches[0] && !vuln.patches[0].id) {\n vuln.patches[0].id = vuln.patches[0].urls[0]\n .split('/')\n .slice(-1)\n .pop() as string;\n }\n }\n\n return vuln;\n });\n}\n\nfunction getPrompts(vulns, policy) {\n return getUpdatePrompts(vulns, policy)\n .concat(getPatchPrompts(vulns, policy))\n .concat(getIgnorePrompts(vulns, policy));\n}\n\nfunction getPatchPrompts(\n vulns: AnnotatedIssue[],\n policy,\n options?: PromptOptions,\n): Prompt[] {\n debug('getPatchPrompts');\n if (!vulns || vulns.length === 0) {\n return [];\n }\n\n let res = stripInvalidPatches(cloneDeep(vulns)).filter((vuln) => {\n // if there's any upgrade available, then remove it\n return canBeUpgraded(vuln) || vuln.type === 'license' ? false : true;\n }) as AnnotatedIssue[];\n // sort by vulnerable package and the largest version\n res.sort(sortPatchPrompts);\n\n const copy = {};\n let offset = 0;\n // mutate our objects so we can try to group them\n // note that I use slice first becuase the `res` array will change length\n // and `reduce` _really_ doesn't like when you change the array under\n // it's feet\n // TODO(kyegupov): convert this reduce to a loop, make grouping logic more clear\n res.slice(0).reduce((acc, curr, i, all) => {\n // var upgrades = curr.upgradePath[1];\n // otherwise it's a patch and that's hidden for now\n if (curr.patches && curr.patches.length) {\n // TODO allow for cross over patches on modules (i.e. patch can work\n // on A-1 and A-2)\n let last;\n\n if (acc[curr.id]) {\n last = curr.id;\n } else {\n // try to find the right vuln id based on the publication times\n last = (\n all\n .filter((vuln) => {\n const patch = vuln.patches[0];\n\n // don't select the one we're looking at\n\n if (curr.id === vuln.id) {\n return false;\n }\n\n // only look at packages with the same name\n if (curr.name !== vuln.name || !patch) {\n return false;\n }\n\n // and ensure the patch can be applied to *our* module version\n if (semver.satisfies(curr.version, patch.version)) {\n // finally make sure the publicationTime is newer than the curr\n // vulnerability\n if (curr.publicationTime! < vuln.publicationTime!) {\n debug(\n 'found alternative location for %s@%s (%s by %s) in %s',\n curr.name,\n curr.version,\n patch.version,\n curr.id,\n vuln.id,\n );\n return true;\n }\n }\n })\n .shift() || curr\n ).id;\n }\n\n if (!acc[last]) {\n // only copy the biggest change\n copy[last] = cloneDeep(curr);\n acc[last] = curr;\n return acc;\n }\n\n // only happens on the 2nd time around\n if (!acc[last].grouped) {\n acc[last].grouped = {\n affected: moduleToObject(acc[last].name + '@' + acc[last].version),\n main: true,\n id: acc[last].id + '-' + i,\n count: 1,\n upgrades: [\n {\n // all this information is used when the user selects group patch\n // specifically: in ./tasks.js~42\n from: acc[last].from,\n filename: acc[last].__filename,\n patches: acc[last].patches,\n version: acc[last].version,\n },\n ],\n patch: true,\n };\n\n acc[last].grouped.affected.full = acc[last].name;\n\n // splice this vuln into the list again so if the user choses to review\n // they'll get this individual vuln and remediation\n copy[last].grouped = {\n main: false,\n requires: acc[last].grouped.id,\n };\n\n res.splice(i + offset, 0, copy[last]);\n offset++;\n }\n\n acc[last].grouped.count++;\n\n (curr as AnnotatedIssueWithGrouping).grouped = {\n main: false,\n requires: acc[last].grouped.id,\n };\n\n // add the from path to our group upgrades if we don't have it already\n const have = !!acc[last].grouped.upgrades.filter((upgrade) => {\n return upgrade.from.join(' ') === curr.from.join(' ');\n }).length;\n\n if (!have) {\n acc[last].grouped.upgrades.push({\n from: curr.from,\n filename: curr.__filename,\n patches: curr.patches,\n version: curr.version,\n });\n } else {\n if (!acc[last].grouped.includes) {\n acc[last].grouped.includes = [];\n }\n acc[last].grouped.includes.push(curr.id);\n }\n }\n\n return acc;\n }, {});\n\n // FIXME this should not just strip those that have an upgrade path, but\n // take into account the previous answers, and if the package has been\n // upgraded, it should be left *out* of our list.\n res = res.filter((curr) => {\n // if (curr.upgradePath[1]) {\n // return false;\n // }\n\n if (!curr.patches || curr.patches.length === 0) {\n return false;\n }\n\n return true;\n });\n\n const prompts = generatePrompt(res, policy, 'p', options);\n\n return prompts;\n}\n\nfunction getIgnorePrompts(vulns, policy, options?) {\n debug('getIgnorePrompts');\n if (!vulns || vulns.length === 0) {\n return [];\n }\n\n const res = stripInvalidPatches(cloneDeep(vulns)).filter((vuln) => {\n // remove all patches and updates\n\n // if there's any upgrade available\n if (canBeUpgraded(vuln)) {\n return false;\n }\n\n if (vuln.patches && vuln.patches.length) {\n return false;\n }\n\n return true;\n });\n\n const prompts = generatePrompt(res, policy, 'i', options);\n\n return prompts;\n}\n\n// This type was deduced from analyzing the code.\n// Exact types of fields and the grouping logic still need investigation and documentation.\ninterface AnnotatedIssueWithGrouping extends AnnotatedIssue {\n grouped?: {\n main;\n requires;\n affected?;\n count?;\n upgrades?;\n patch?;\n id?;\n };\n}\n\nfunction getUpdatePrompts(vulns: AnnotatedIssue[], policy, options?): Prompt[] {\n debug('getUpdatePrompts');\n if (!vulns || vulns.length === 0) {\n return [];\n }\n\n let res = stripInvalidPatches(cloneDeep(vulns)).filter((vuln) => {\n // only keep upgradeable\n return canBeUpgraded(vuln);\n }) as AnnotatedIssueWithGrouping[];\n\n // sort by vulnerable package and the largest version\n res.sort(sortUpgradePrompts);\n let copy: AnnotatedIssueWithGrouping | null = null;\n let offset = 0;\n // mutate our objects so we can try to group them\n // note that I use slice first becuase the `res` array will change length\n // and `reduce` _really_ doesn't like when you change the array under\n // it's feet\n // TODO(kyegupov): rewrite this reduce into more readable loop, avoid mutating original list,\n // understand and document the grouping logic\n res.slice(0).reduce((acc, curr, i) => {\n const from = curr.from[1] as string;\n\n if (!acc[from]) {\n // only copy the biggest change\n copy = cloneDeep(curr);\n acc[from] = curr;\n return acc;\n }\n\n const upgrades = curr.upgradePath.slice(-1).shift() as string;\n // otherwise it's a patch and that's hidden for now\n if (upgrades && curr.upgradePath[1]) {\n if (!acc[from].grouped) {\n acc[from].grouped = {\n affected: moduleToObject(from),\n main: true,\n id: acc[from].id + '-' + i,\n count: 1,\n upgrades: [],\n };\n acc[from].grouped.affected.full = from;\n\n // splice this vuln into the list again so if the user choses to review\n // they'll get this individual vuln and remediation\n copy!.grouped = {\n main: false,\n requires: acc[from].grouped.id,\n };\n\n res.splice(i + offset, 0, copy as AnnotatedIssueWithGrouping);\n offset++;\n }\n\n acc[from].grouped.count++;\n\n curr.grouped = {\n main: false,\n requires: acc[from].grouped.id,\n };\n\n const p = moduleToObject(upgrades);\n if (\n p.name !== acc[from].grouped.affected.name &&\n (' ' + acc[from].grouped.upgrades.join(' ') + ' ').indexOf(\n p.name + '@',\n ) === -1\n ) {\n debug('+ adding %s to upgrades', upgrades);\n acc[from].grouped.upgrades.push(upgrades);\n }\n }\n\n return acc;\n }, {});\n\n // now strip anything that doesn't have an upgrade path\n res = res.filter((curr) => {\n return !!curr.upgradePath[1];\n });\n\n const prompts = generatePrompt(res, policy, 'u', options);\n\n return prompts;\n}\n\nfunction canBeUpgraded(vuln) {\n if (vuln.parentDepType === 'extraneous') {\n return false;\n }\n\n if (vuln.bundled) {\n return false;\n }\n\n if (vuln.shrinkwrap) {\n return false;\n }\n\n return vuln.upgradePath.some((pkg, i) => {\n // if the upgade path is to upgrade the module to the same range the\n // user already asked for, then it means we need to just blow that\n // module away and re-install\n if (vuln.from.length > i && pkg === vuln.from[i]) {\n return true;\n }\n\n // if the upgradePath contains the first two elements, that is\n // the project itself (i.e. jsbin) then the direct dependency can be\n // upgraded. Note that if the first two elements\n if (vuln.upgradePath.slice(0, 2).filter(Boolean).length) {\n return true;\n }\n });\n}\n\ninterface Action {\n value: {};\n key?: string;\n name: string;\n short?: string;\n default?: boolean;\n meta?: any;\n}\n\ninterface Prompt {\n when?: (answers) => void;\n name: string;\n type?: string;\n message: string;\n\n // These fields are assigned later\n default?: number | boolean | string;\n choices?: any[];\n vuln?: any;\n patches?: any;\n}\n\ninterface PromptOptions {\n ignoreDisabled?: { reasonCode: string };\n earlyExit?: boolean;\n packageManager?: string;\n}\n\nfunction generatePrompt(\n vulns: AnnotatedIssueWithGrouping[],\n policy,\n prefix: string,\n options?: PromptOptions,\n): Prompt[] {\n if (!prefix) {\n prefix = '';\n }\n if (!vulns) {\n vulns = []; // being defensive, but maybe we should throw an error?\n }\n\n const skipAction = {\n value: 'skip', // the value that we get in our callback\n key: 's',\n name: 'Skip', // the text the user sees\n };\n\n const ignoreAction: Action = {\n value: options && options.ignoreDisabled ? 'skip' : 'ignore',\n key: 'i',\n meta: {\n // arbitrary data that we'll merged into the `value` later on\n days: 30,\n },\n short: 'Ignore',\n name:\n options && options.ignoreDisabled\n ? ignoreDisabledReasons[options.ignoreDisabled.reasonCode]\n : 'Set to ignore for 30 days (updates policy)',\n };\n\n const patchAction: Action = {\n value: 'patch',\n key: 'p',\n short: 'Patch',\n name:\n 'Patch (modifies files locally, updates policy for `snyk protect` ' +\n 'runs)',\n };\n\n const updateAction: Action = {\n value: 'update',\n key: 'u',\n short: 'Upgrade',\n name: '', // updated below to the name of the package to update\n };\n\n let prompts = vulns.map((vuln, i) => {\n let id = vuln.id || 'node-' + vuln.name + '@' + vuln.below;\n\n id += '-' + prefix + i;\n\n // make complete copies of the actions, otherwise we'll mutate the object\n const ignore = cloneDeep(ignoreAction);\n const skip = cloneDeep(skipAction);\n const patch = cloneDeep(patchAction);\n const update = cloneDeep(updateAction);\n const review: Action = {\n value: 'review',\n short: 'Review',\n name: 'Review issues separately',\n };\n\n const choices: Action[] = [];\n\n const from = vuln.from\n .slice(1)\n .filter(Boolean)\n .shift();\n\n // FIXME this should be handled a little more gracefully\n if (vuln.from.length === 1) {\n debug('Skipping issues in core package with no upgrade path: ' + id);\n }\n const vulnIn = vuln.from.slice(-1).pop();\n const severity = titleCaseText(vuln.severity);\n\n let infoLink = ' Info: ' + chalk.underline(config.ROOT);\n\n let messageIntro;\n let fromText: boolean | string = false;\n const group = vuln.grouped && vuln.grouped.main ? vuln.grouped : false;\n\n let originalSeverityStr = '';\n if (vuln.originalSeverity && vuln.originalSeverity !== vuln.severity) {\n originalSeverityStr = ` (originally ${titleCaseText(\n vuln.originalSeverity,\n )})`;\n }\n\n if (group) {\n infoLink += chalk.underline(\n '/package/npm/' + group.affected.name + '/' + group.affected.version,\n );\n const joiningText = group.patch ? 'in' : 'via';\n const issues = vuln.type === 'license' ? 'issues' : 'vulnerabilities';\n messageIntro = fmt(\n `${icon.ISSUE} %s %s %s introduced %s %s`,\n group.count,\n `${severity}${originalSeverityStr}`,\n issues,\n joiningText,\n group.affected.full,\n );\n messageIntro = createSeverityBasedIssueHeading(\n messageIntro,\n vuln.severity,\n );\n } else {\n infoLink += chalk.underline('/vuln/' + vuln.id);\n messageIntro = fmt(\n `${icon.ISSUE} %s severity %s found in %s, introduced via`,\n `${severity}${originalSeverityStr}`,\n vuln.type === 'license' ? 'issue' : 'vuln',\n vulnIn,\n from,\n );\n messageIntro = createSeverityBasedIssueHeading(\n messageIntro,\n vuln.severity,\n );\n messageIntro += '\\n Description: ' + vuln.title;\n fromText =\n from !== vuln.from.slice(1).join(PATH_SEPARATOR)\n ? ' From: ' + vuln.from.slice(1).join(PATH_SEPARATOR)\n : '';\n }\n\n let note: boolean | string = false;\n if (vuln.note) {\n if (group && group.patch) {\n // no-op\n } else {\n note = ' Note: ' + vuln.note;\n }\n }\n\n const res: Prompt = {\n when(answers) {\n let haventUpgraded = true;\n // only show this question if the user choose to review the details\n // of the vuln\n if (vuln.grouped && !vuln.grouped.main) {\n // find how they answered on the top level question\n const groupAnswer = Object.keys(answers)\n .map((key) => {\n if (answers[key].meta) {\n // this meta.groupId only appears on a \"review\" choice, and thus\n // this map will pick out those vulns that are specifically\n // associated with this review group.\n if (answers[key].meta.groupId === vuln.grouped!.requires) {\n if (\n answers[key].choice === 'ignore' &&\n answers[key].meta.review\n ) {\n answers[key].meta.vulnsInGroup.push({\n id: vuln.id,\n from: vuln.from,\n });\n return false;\n }\n\n return answers[key];\n }\n }\n return false;\n })\n .filter(Boolean);\n\n if (!groupAnswer.length) {\n debug('no group answer: show %s when %s', vuln.id, false);\n return false;\n }\n\n // if we've upgraded, then stop asking\n let updatedTo: Prompt | null = null;\n haventUpgraded =\n groupAnswer.filter((answer) => {\n if (answer.choice === 'update') {\n updatedTo = answer;\n return true;\n }\n }).length === 0;\n\n if (!haventUpgraded) {\n // echo out what would be upgraded\n const via =\n 'Fixed through previous upgrade instruction to ' +\n ((updatedTo as unknown) as Prompt).vuln.upgradePath[1];\n console.log(['', messageIntro, infoLink, via].join('\\n'));\n }\n }\n\n if (haventUpgraded) {\n console.log(''); // blank line between prompts...kinda lame, sorry\n }\n\n debug('final show %s when %s', vuln.id, res);\n\n return res; // true = show next\n },\n name: id,\n type: 'list',\n message: [\n messageIntro,\n infoLink,\n fromText,\n note,\n chalk.green('\\n Remediation options'),\n ]\n .filter(Boolean)\n .join('\\n'),\n };\n\n const upgradeAvailable = canBeUpgraded(vuln);\n const toPackage = vuln.upgradePath.filter(Boolean).shift();\n const isReinstall = toPackage === from;\n const isYarn = !!(options && options.packageManager === 'yarn');\n\n // note: the language presented the user is \"upgrade\" rather than \"update\"\n // this change came long after all this code was written. I've decided\n // *not* to update all the variables referring to `update`, but just\n // to warn my dear code-reader that this is intentional.\n\n // note: Yarn reinstallation does not currently work because the\n // remediation advice is actually for npm\n\n if (upgradeAvailable && (!isYarn || !isReinstall)) {\n choices.push(update);\n\n const word = isReinstall ? 'Re-install ' : 'Upgrade to ';\n\n update.short = word + toPackage;\n let out = word + toPackage;\n const toPackageVersion = moduleToObject(toPackage as string).version;\n const diff = semver.diff(\n moduleToObject(from as string).version,\n toPackageVersion,\n );\n let lead = '';\n const breaking = color.status.error('potentially breaking change');\n if (diff === 'major') {\n lead = ' (' + breaking + ', ';\n } else {\n lead = ' (';\n }\n\n lead += 'triggers upgrade to ';\n if (group && group.upgrades.length) {\n out += lead + group.upgrades.join(', ') + ')';\n } else {\n const last = vuln.upgradePath.slice(-1).shift();\n if (toPackage !== last) {\n out += lead + last + ')';\n } else if (diff === 'major') {\n out += ' (' + breaking + ')';\n }\n }\n update.name = out;\n } else {\n // No upgrade available (as per no patch)\n let reason = '';\n\n if (vuln.parentDepType === 'extraneous') {\n reason = fmt('extraneous package %s cannot be upgraded', vuln.from[1]);\n } else if (vuln.shrinkwrap) {\n reason = fmt(\n 'upgrade unavailable as %s@%s is shrinkwrapped by %s',\n vuln.name,\n vuln.version,\n vuln.shrinkwrap,\n );\n } else if (vuln.bundled) {\n reason = fmt(\n 'upgrade unavailable as %s is bundled in vulnerable %s',\n vuln.bundled.slice(-1).pop(),\n vuln.name,\n );\n } else {\n reason =\n \"no sufficient upgrade available we'll notify you when \" +\n 'there is one';\n }\n\n choices.push({\n value: 'skip',\n key: 'u',\n short: 'Upgrade (none available)',\n name: 'Upgrade (' + reason + ')',\n });\n }\n\n let patches = null;\n\n if (upgradeAvailable && group) {\n // no-op\n } else {\n if (vuln.patches && vuln.patches.length) {\n // check that the version we have has a patch available\n patches = protect.patchesForPackage(vuln);\n\n if (patches !== null) {\n if (!upgradeAvailable) {\n patch.default = true;\n }\n res.patches = patches;\n\n if (group) {\n patch.name = fmt('Patch the %s vulnerabilities', group.count);\n }\n\n choices.push(patch);\n }\n }\n }\n\n // only show patch option if this is NOT a grouped upgrade\n if (upgradeAvailable === false || !group) {\n if (patches === null) {\n // add a disabled option saying that patch isn't available\n // note that adding `disabled: true` does nothing, so the user can\n // actually select this option. I'm not 100% it's the right thing,\n // but we'll keep a keen eye on user feedback.\n choices.push({\n value: 'skip',\n key: 'p',\n short: 'Patch (none available)',\n name:\n \"Patch (no patch available, we'll notify you when \" +\n 'there is one)',\n });\n }\n }\n\n if (group) {\n review.meta = {\n groupId: group.id,\n review: true,\n };\n choices.push(review);\n\n ignore.meta.review = true;\n ignore.meta.groupId = group.id;\n ignore.meta.vulnsInGroup = [];\n }\n\n if (patches === null && !upgradeAvailable) {\n ignore.default = true;\n }\n\n choices.push(ignore);\n choices.push(skip);\n\n // look for a default - the `res.default` needs to be the index\n // of the choice, so we remap the choices to include the index, value of\n // choice and whether it was supposed to be a default. If the user is\n // updating their policy options, then we select the choice they had\n // before, otherwise we select the default\n res.default = (\n choices\n .map((choice, cIndex) => {\n return { i: cIndex, default: choice.default };\n })\n .filter((choice) => {\n return choice.default;\n })\n .shift() || { i: 0 }\n ).i;\n\n // kludge to make sure that we get the vuln in the user selection\n res.choices = choices.map((choice) => {\n const value = choice.value;\n // this allows us to pass more data into the inquirer results\n if (vuln.grouped && !vuln.grouped.main) {\n if (!choice.meta) {\n choice.meta = {};\n }\n choice.meta.groupId = vuln.grouped.requires;\n }\n choice.value = {\n meta: choice.meta,\n vuln,\n choice: value, // this is the string \"update\", \"ignore\", etc\n };\n return choice;\n });\n\n res.vuln = vuln;\n\n return res;\n });\n\n // zip together every prompt and a prompt asking \"why\", note that the `when`\n // callback controls whether not to prompt the user with this question,\n // in this case, we always show if the user choses to ignore.\n prompts = prompts.reduce((acc: Prompt[], curr) => {\n acc.push(curr);\n const rule = snykPolicy.getByVuln(policy, curr.choices![0].value.vuln);\n let defaultAnswer = 'None given';\n if (rule && rule.type === 'ignore') {\n defaultAnswer = rule.reason;\n }\n const issue =\n curr.choices![0].value.vuln &&\n curr.choices![0].value.vuln.type === 'license'\n ? 'issue'\n : 'vulnerability';\n acc.push({\n name: curr.name + '-reason',\n message: '[audit] Reason for ignoring ' + issue + '?',\n default: defaultAnswer,\n when(answers) {\n if (!answers[curr.name]) {\n return false;\n }\n return answers[curr.name].choice === 'ignore';\n },\n });\n return acc;\n }, []);\n\n return prompts;\n}\n\nfunction startOver() {\n return {\n name: 'misc-start-over',\n message:\n 'Existing .snyk policy found. Ignore it and start from scratch [y] or update it [N]?',\n type: 'confirm',\n default: false,\n };\n}\n\nfunction nextSteps(pkg, prevAnswers) {\n let skipProtect = false;\n const prompts: Prompt[] = [];\n let i;\n\n i = get(pkg, 'scripts.test', '').indexOf('snyk test');\n if (i === -1) {\n prompts.push({\n name: 'misc-add-test',\n message:\n 'Add `snyk test` to package.json file to fail test on newly ' +\n 'disclosed vulnerabilities?\\n' +\n 'This will require authentication via `snyk auth` when running tests.',\n type: 'confirm',\n default: false,\n });\n }\n\n // early exit if prevAnswers is false (when snyk test.ok === true)\n if (prevAnswers === false) {\n return prompts;\n }\n\n i = get(pkg, 'scripts.prepublish', '').indexOf('snyk-pro');\n\n // if `snyk protect` doesn't already appear, then check if we need to add it\n if (i === -1) {\n skipProtect = Object.keys(prevAnswers).every((key) => {\n return prevAnswers[key].choice !== 'patch';\n });\n } else {\n skipProtect = true;\n }\n\n if (!skipProtect) {\n prompts.push({\n name: 'misc-add-protect',\n message:\n 'Add `snyk protect` as a package.json installation hook to ' +\n 'apply chosen patches on install?',\n type: 'confirm',\n default: true,\n });\n }\n\n return prompts;\n}\n","import * as debugModule from 'debug';\nconst debug = debugModule('snyk');\nconst cloneDeep = require('lodash.clonedeep');\n\nexport default function answersToTasks(answers) {\n const tasks = {\n ignore: [],\n update: [],\n patch: [],\n skip: [],\n };\n\n Object.keys(answers).forEach((key) => {\n // if we're looking at a reason, skip it\n if (key.indexOf('-reason') !== -1) {\n return;\n }\n\n // ignore misc questions, like \"add snyk test to package?\"\n if (key.indexOf('misc-') === 0) {\n return;\n }\n\n const answer = answers[key];\n const task = answer.choice;\n if (task === 'review' || task === 'skip') {\n // task = 'skip';\n return;\n }\n\n const vuln = answer.vuln;\n\n if (task === 'patch' && vuln.grouped && vuln.grouped.upgrades) {\n // ignore the first as it's the same one as this particular answer\n debug(\n 'additional answers required: %s',\n vuln.grouped.count - 1,\n vuln.grouped,\n );\n\n const additional = vuln.grouped.upgrades.slice(1);\n\n additional.forEach((upgrade) => {\n const copy = cloneDeep(vuln);\n copy.from = upgrade.from;\n copy.__filename = upgrade.filename;\n copy.patches = upgrade.patches;\n copy.version = upgrade.version;\n tasks[task].push(copy);\n });\n }\n\n if (task === 'ignore') {\n answer.meta.reason = answers[key + '-reason'];\n if (answer.meta.vulnsInGroup) {\n // also ignore any in the group\n answer.meta.vulnsInGroup.forEach((vulnInGroup) => {\n tasks[task].push({\n meta: answer.meta,\n vuln: vulnInGroup,\n });\n });\n } else {\n tasks[task].push(answer);\n }\n } else {\n tasks[task].push(vuln);\n }\n });\n\n return tasks;\n}\n","import * as debugModule from 'debug';\nconst debug = debugModule('snyk');\n\nimport * as path from 'path';\nimport * as inquirer from '@snyk/inquirer';\nimport * as fs from 'fs';\nimport * as tryRequire from 'snyk-try-require';\nimport chalk from 'chalk';\nimport * as url from 'url';\nconst cloneDeep = require('lodash.clonedeep');\nconst get = require('lodash.get');\nimport { exec } from 'child_process';\nimport { apiTokenExists } from '../../../lib/api-token';\nimport * as auth from '../auth/is-authed';\nimport getVersion from '../version';\nimport * as allPrompts from './prompts';\nimport answersToTasks from './tasks';\nimport * as snyk from '../../../lib/';\nimport { monitor as snykMonitor } from '../../../lib/monitor';\nimport { isCI } from '../../../lib/is-ci';\nconst protect = require('../../../lib/protect');\nimport * as authorization from '../../../lib/authorization';\nimport config from '../../../lib/config';\nimport { spinner } from '../../../lib/spinner';\nimport * as analytics from '../../../lib/analytics';\nimport * as alerts from '../../../lib/alerts';\nimport npm, { getVersion as npmGetVersion } from '../../../lib/npm';\nimport * as detect from '../../../lib/detect';\nimport * as plugins from '../../../lib/plugins';\nimport { ModuleInfo as moduleInfo } from '../../../lib/module-info';\nimport { MisconfiguredAuthInCI } from '../../../lib/errors/misconfigured-auth-in-ci-error';\nimport { MissingTargetFileError } from '../../../lib/errors/missing-targetfile-error';\nimport * as pm from '../../../lib/package-managers';\nimport { icon, color } from '../../../lib/theme';\nimport {\n Options,\n MonitorMeta,\n MonitorResult,\n PackageJson,\n ProtectOptions,\n} from '../../../lib/types';\nimport { LegacyVulnApiResult } from '../../../lib/snyk-test/legacy';\nimport { MultiProjectResult } from '@snyk/cli-interface/legacy/plugin';\n\nexport default function wizard(options?: Options) {\n options = options || ({} as Options);\n options.org = options.org || config.org || null;\n\n return processPackageManager(options)\n .then(processWizardFlow)\n .catch((error) => Promise.reject(error));\n}\n\nasync function processPackageManager(options: Options) {\n const packageManager = detect.detectPackageManager(process.cwd(), options);\n\n const supportsWizard = pm.WIZARD_SUPPORTED_PACKAGE_MANAGERS.includes(\n packageManager,\n );\n if (!supportsWizard) {\n return Promise.reject(\n `Snyk wizard for ${pm.SUPPORTED_PACKAGE_MANAGER_NAME[packageManager]} projects is not currently supported`,\n );\n }\n\n const nodeModulesExist = fs.existsSync(path.join('.', 'node_modules'));\n if (!nodeModulesExist) {\n // throw a custom error\n throw new Error(\n \"Missing node_modules folder: we can't patch without having installed packages.\" +\n `\\nPlease run '${packageManager} install' first.`,\n );\n }\n\n return Promise.resolve(options);\n}\n\nasync function loadOrCreatePolicyFile(options: Options & ProtectOptions) {\n let policyFile;\n try {\n policyFile = await snyk.policy.load(options['policy-path'], options);\n return policyFile;\n } catch (error) {\n // if we land in the catch, but we're in interactive mode, then it means\n // the file hasn't been created yet, and that's fine, so we'll resolve\n // with an empty object\n if (error.code === 'ENOENT') {\n options.newPolicy = true;\n policyFile = snyk.policy.create();\n return policyFile;\n }\n\n throw error;\n }\n}\n\nasync function processWizardFlow(options) {\n spinner.sticky();\n const message = options['dry-run']\n ? '*** dry run ****'\n : '~~~~ LIVE RUN ~~~~';\n debug(message);\n const policyFile = await loadOrCreatePolicyFile(options);\n\n const authed = await auth.isAuthed();\n analytics.add('inline-auth', !authed);\n if (!authed && isCI()) {\n throw MisconfiguredAuthInCI();\n }\n\n apiTokenExists();\n const cliIgnoreAuthorization = await authorization.actionAllowed(\n 'cliIgnore',\n options,\n );\n\n options.ignoreDisabled = cliIgnoreAuthorization.allowed\n ? false\n : cliIgnoreAuthorization;\n if (options.ignoreDisabled) {\n debug('ignore disabled');\n }\n const intro = `Snyk's wizard will:\n\n* Enumerate your local dependencies and query Snyk's servers for vulnerabilities\n* Guide you through fixing found vulnerabilities\n* Create a .snyk policy file to guide snyk commands such as \\`test\\` and \\`protect\\`\n* Remember your dependencies to alert you when new vulnerabilities are disclosed\n`;\n\n return Promise.resolve(intro)\n .then((str) => {\n if (!isCI()) {\n console.log(str);\n }\n })\n .then(() => {\n return new Promise<void>((resolve) => {\n if (options.newPolicy) {\n return resolve(); // don't prompt to start over\n }\n inquirer.prompt(allPrompts.startOver()).then((answers) => {\n analytics.add('start-over', answers['misc-start-over']);\n if (answers['misc-start-over']) {\n options['ignore-policy'] = true;\n }\n resolve();\n });\n });\n })\n .then(() => {\n // We need to have modules information for remediation. See Payload.modules\n options.traverseNodeModules = true;\n\n return snyk.test(process.cwd(), options).then((oneOrManyRes) => {\n if (oneOrManyRes[0]) {\n throw new Error(\n 'Multiple subprojects are not yet supported by snyk wizard',\n );\n }\n const res = oneOrManyRes as LegacyVulnApiResult;\n if (alerts.hasAlert('tests-reached') && res.isPrivate) {\n return;\n }\n const packageFile = path.resolve(process.cwd(), 'package.json');\n if (!res.ok) {\n const vulns = res.vulnerabilities;\n const paths = vulns.length === 1 ? 'path' : 'paths';\n const ies = vulns.length === 1 ? 'y' : 'ies';\n // echo out the deps + vulns found\n console.log(\n 'Tested %s dependencies for known vulnerabilities, %s',\n res.dependencyCount,\n chalk.bold.red(\n 'found ' +\n res.uniqueCount +\n ' vulnerabilit' +\n ies +\n ', ' +\n vulns.length +\n ' vulnerable ' +\n paths +\n '.',\n ),\n );\n } else {\n console.log(\n color.status.success(\n `${icon.VALID} Tested %s dependencies for known vulnerabilities, no vulnerable paths found.`,\n ),\n res.dependencyCount,\n );\n }\n\n return snyk.policy.loadFromText(res.policy).then((combinedPolicy) => {\n return tryRequire(packageFile).then((pkg) => {\n options.packageLeading = pkg.leading;\n options.packageTrailing = pkg.trailing;\n return interactive(\n res,\n pkg,\n combinedPolicy,\n options,\n ).then((answers) => processAnswers(answers, policyFile, options));\n });\n });\n });\n });\n}\n\nexport function interactive(test, pkg, policy, options) {\n const vulns = test.vulnerabilities;\n if (!policy) {\n policy = {};\n }\n\n if (!pkg) {\n // only really happening in tests\n pkg = {};\n }\n\n return new Promise((resolve) => {\n debug('starting questions');\n const prompts = allPrompts.getUpdatePrompts(vulns, policy, options);\n resolve(inquire(prompts, {}));\n })\n .then((answers) => {\n const prompts = allPrompts.getPatchPrompts(vulns, policy, options);\n return inquire(prompts, answers);\n })\n .then((answers) => {\n const prompts = allPrompts.getIgnorePrompts(vulns, policy, options);\n return inquire(prompts, answers);\n })\n .then((answers) => {\n const prompts = allPrompts.nextSteps(pkg, test.ok ? false : answers);\n return inquire(prompts, answers);\n })\n .then((answers) => {\n if (pkg.shrinkwrap) {\n answers['misc-build-shrinkwrap'] = true;\n }\n return answers;\n });\n}\n\nexport function inquire(prompts, answers): Promise<{}> {\n if (prompts.length === 0) {\n return Promise.resolve(answers);\n }\n // inquirer will handle dots in name as path in hash (CSUP-272)\n prompts.forEach((prompt) => {\n prompt.name = prompt.name.replace(/\\./g, '--DOT--');\n });\n return new Promise((resolve) => {\n inquirer.prompt(prompts).then((theseAnswers) => {\n answers = { ...answers, ...theseAnswers };\n Object.keys(answers).forEach((answerName) => {\n if (answerName.indexOf('--DOT--') > -1) {\n const newName = answerName.replace(/--DOT--/g, '.');\n answers[newName] = answers[answerName];\n delete answers[answerName];\n }\n });\n resolve(answers);\n });\n });\n}\n\nfunction getNewScriptContent(scriptContent, cmd) {\n if (scriptContent) {\n // only add the command if it's not already in the script\n if (scriptContent.indexOf(cmd) === -1) {\n return cmd + ' && ' + scriptContent;\n }\n return scriptContent;\n }\n return cmd;\n}\n\nfunction addProtectScripts(existingScripts, npmVersion, options) {\n const scripts = existingScripts ? cloneDeep(existingScripts) : {};\n scripts['snyk-protect'] = 'snyk protect';\n\n let cmd = 'npm run snyk-protect';\n\n // legacy check for `postinstall`, if `npm run snyk-protect` is in there\n // we'll replace it with `true` so it can be cleanly swapped out\n const postinstall = scripts.postinstall;\n if (postinstall && postinstall.indexOf(cmd) !== -1) {\n scripts.postinstall = postinstall.replace(cmd, 'true');\n }\n\n if (options.packageManager === 'yarn') {\n cmd = 'yarn run snyk-protect';\n scripts.prepare = getNewScriptContent(scripts.prepare, cmd);\n return scripts;\n }\n\n const npmVersionMajor = parseInt(npmVersion.split('.')[0], 10);\n if (npmVersionMajor >= 5) {\n scripts.prepare = getNewScriptContent(scripts.prepare, cmd);\n\n return scripts;\n }\n\n scripts.prepublish = getNewScriptContent(scripts.prepublish, cmd);\n\n return scripts;\n}\n\nfunction calculatePkgFileIndentation(packageFile: string): number {\n let pkgIndentation = 2;\n const whitespaceMatch = packageFile.match(/{\\n(\\s+)\"/);\n if (whitespaceMatch && whitespaceMatch[1]) {\n pkgIndentation = whitespaceMatch[1].length;\n }\n return pkgIndentation;\n}\n\nexport function processAnswers(answers, policy, options) {\n if (!options) {\n options = {};\n }\n options.packageLeading = options.packageLeading || '';\n options.packageTrailing = options.packageTrailing || '';\n // allow us to capture the answers the users gave so we can combine this\n // the scenario running\n if (options.json) {\n return Promise.resolve(JSON.stringify(answers, null, 2));\n }\n const cwd = process.cwd();\n const packageFile = path.resolve(cwd, 'package.json');\n const packageManager = detect.detectPackageManager(cwd, options);\n const targetFile = options.file || detect.detectPackageFile(cwd);\n if (!targetFile) {\n throw MissingTargetFileError(cwd);\n }\n const isLockFileBased =\n targetFile.endsWith('package-lock.json') ||\n targetFile.endsWith('yarn.lock');\n\n let pkg = {} as PackageJson;\n let pkgIndentation = 2;\n\n sendWizardAnalyticsData(answers);\n\n const tasks = answersToTasks(answers);\n debug(tasks);\n\n const live = !options['dry-run'];\n let snykVersion = '*';\n\n const res = protect\n .generatePolicy(policy, tasks, live, options.packageManager)\n .then(async (policy2) => {\n if (!live) {\n // if this was a dry run, we'll throw an error to bail out of the\n // promise chain, then in the catch, check the error.code and if\n // it matches `DRYRUN` we'll return the text and not an error\n // (which avoids the exit code 1).\n const e = new Error('This was a dry run: nothing changed');\n (e as any).code = 'DRYRUN';\n throw e;\n }\n\n await policy2.save(cwd, spinner);\n\n // don't do this during testing\n if (isCI() || process.env.TAP) {\n return Promise.resolve();\n }\n\n return new Promise<void>((resolve) => {\n exec(\n 'git add .snyk',\n {\n cwd,\n },\n (error, stdout, stderr) => {\n if (error) {\n debug('error adding .snyk to git', error);\n }\n\n if (stderr) {\n debug('stderr adding .snyk to git', stderr.trim());\n }\n\n // resolve either way\n resolve();\n },\n );\n });\n })\n .then(() => {\n // re-read the package.json - because the generatePolicy can apply\n // an `npm install` which will change the deps\n return Promise.resolve(fs.readFileSync(packageFile, 'utf8'))\n .then((packageFileString) => {\n pkgIndentation = calculatePkgFileIndentation(packageFileString);\n return packageFileString;\n })\n .then(JSON.parse)\n .then((updatedPkg) => {\n pkg = updatedPkg;\n });\n })\n .then(getVersion)\n .then((v) => {\n debug('snyk version: %s', v);\n // little hack to circumvent local testing where the version will\n // be the git branch + commit\n if (v.match(/^\\d+\\./) === null) {\n v = '*';\n } else {\n v = '^' + v;\n }\n snykVersion = v;\n })\n .then(() => {\n analytics.add('add-snyk-test', answers['misc-add-test']);\n if (!answers['misc-add-test']) {\n return;\n }\n\n debug('adding `snyk test` to package');\n\n if (!pkg.scripts) {\n pkg.scripts = {};\n }\n\n const test = pkg.scripts.test;\n const cmd = 'snyk test';\n if (test && test !== 'echo \"Error: no test specified\" && exit 1') {\n // only add the test if it's not already in the test\n if (test.indexOf(cmd) === -1) {\n pkg.scripts.test = cmd + ' && ' + test;\n }\n } else {\n pkg.scripts.test = cmd;\n }\n })\n .then(async () => {\n const npmVersion = await npmGetVersion();\n analytics.add('add-snyk-protect', answers['misc-add-protect']);\n if (!answers['misc-add-protect']) {\n return;\n }\n\n debug('adding `snyk protect` to package');\n\n if (!pkg.scripts) {\n pkg.scripts = {};\n }\n\n pkg.scripts = addProtectScripts(pkg.scripts, npmVersion, options);\n\n pkg.snyk = true;\n })\n .then(() => {\n let lbl = 'Updating package.json...';\n const addSnykToDependencies =\n answers['misc-add-test'] || answers['misc-add-protect'];\n let updateSnykFunc = () => {\n return;\n }; // noop\n\n if (addSnykToDependencies) {\n updateSnykFunc = () => protect.install(packageManager, ['snyk'], live);\n }\n if (addSnykToDependencies) {\n debug('updating %s', packageFile);\n\n if (\n get(pkg, 'dependencies.snyk') ||\n get(pkg, 'peerDependencies.snyk') ||\n get(pkg, 'optionalDependencies.snyk')\n ) {\n // nothing to do as the user already has Snyk\n // TODO decide whether we should update the version being used\n // and how do we reconcile if the global install is older\n // than the local version?\n } else {\n const addSnykToProdDeps = answers['misc-add-protect'];\n const snykIsInDevDeps = get(pkg, 'devDependencies.snyk');\n\n if (addSnykToProdDeps) {\n if (!pkg.dependencies) {\n pkg.dependencies = {};\n }\n pkg.dependencies.snyk = snykVersion;\n lbl =\n 'Adding Snyk to production dependencies ' +\n '(used by snyk protect)';\n\n // but also check if we should remove it from devDependencies\n if (snykIsInDevDeps) {\n delete pkg.devDependencies.snyk;\n }\n } else if (!snykIsInDevDeps) {\n if (!pkg.devDependencies) {\n pkg.devDependencies = {};\n }\n lbl = 'Adding Snyk to devDependencies (used by npm test)';\n pkg.devDependencies.snyk = snykVersion;\n updateSnykFunc = () =>\n protect.installDev(packageManager, ['snyk'], live);\n }\n }\n }\n\n if (addSnykToDependencies || tasks.update.length) {\n const packageString =\n options.packageLeading +\n JSON.stringify(pkg, null, pkgIndentation) +\n options.packageTrailing;\n return (\n spinner(lbl)\n .then(() => {\n fs.writeFileSync(packageFile, packageString);\n if (isLockFileBased) {\n // we need to trigger a lockfile update after adding snyk\n // as a dep\n return updateSnykFunc();\n }\n })\n // clear spinner in case of success or failure\n .then(spinner.clear<void>(lbl))\n .catch((error) => {\n spinner.clear<void>(lbl)();\n throw error;\n })\n );\n }\n })\n .then(() => {\n if (answers['misc-build-shrinkwrap'] && tasks.update.length) {\n debug('updating shrinkwrap');\n\n const lbl = 'Updating npm-shrinkwrap.json...';\n return (\n spinner(lbl)\n .then(() => npm('shrinkwrap', null, live, cwd, null))\n // clear spinner in case of success or failure\n .then(spinner.clear(lbl))\n .catch((error) => {\n spinner.clear<void>(lbl)();\n throw error;\n })\n );\n }\n })\n .then(() => {\n if (answers['misc-test-no-monitor']) {\n // allows us to automate tests\n return {\n id: 'test',\n } as MonitorResult;\n }\n\n debug('running monitor');\n const lbl =\n 'Remembering current dependencies for future ' + 'notifications...';\n const meta = { method: 'wizard', packageManager };\n const plugin = plugins.loadPlugin(packageManager);\n const info = moduleInfo(plugin, options.policy);\n\n if (isLockFileBased) {\n // TODO: fix this by providing better patch support for yarn\n // yarn hoists packages up a tree so we can't assume their location\n // on disk without traversing node_modules\n // currently the npm@2 nd npm@3 plugin resolve-deps can do this\n // but not the latest node-lockfile-parser\n // HACK: for yarn set traverseNodeModules option to true\n // bypass lockfile test for wizard, but set this back\n // before we monitor\n options.traverseNodeModules = false;\n }\n\n // TODO: extract common inspect & monitor code and use the same way here\n // as during test & monitor\n return (\n info\n .inspect(cwd, targetFile, options)\n .then((inspectRes) => spinner(lbl).then(() => inspectRes))\n .then((inspectRes) => {\n // both ruby and node plugin return multi result\n return snykMonitor(\n cwd,\n meta as MonitorMeta,\n (inspectRes as MultiProjectResult).scannedProjects[0],\n options,\n inspectRes.plugin,\n );\n })\n // clear spinner in case of success or failure\n .then(spinner.clear(lbl))\n .catch((error) => {\n spinner.clear<void>(lbl)();\n throw error;\n })\n );\n })\n .then((monitorRes) => {\n const endpoint = url.parse(config.API);\n let leader = '';\n if (monitorRes.org) {\n leader = '/org/' + monitorRes.org;\n }\n endpoint.pathname = leader + '/monitor/' + monitorRes.id;\n const monitorUrl = url.format(endpoint);\n endpoint.pathname = leader + '/manage';\n const manageUrl = url.format(endpoint);\n\n return (\n (options.newPolicy\n ? // if it's a newly created file\n \"\\nYour policy file has been created with the actions you've \" +\n 'selected, add it to your source control (`git add .snyk`).'\n : // otherwise we updated it\n '\\nYour .snyk policy file has been successfully updated.') +\n '\\nTo review your policy, run `snyk policy`.\\n\\n' +\n 'You can see a snapshot of your dependencies here:\\n' +\n monitorUrl +\n '\\n\\n' +\n (monitorRes.isMonitored\n ? \"We'll notify you when relevant new vulnerabilities are \" +\n 'disclosed.\\n\\n'\n : chalk.bold.red(\n 'Project is inactive, so notifications are turned off.\\n' +\n 'Activate this project here: ' +\n manageUrl +\n '\\n',\n )) +\n (monitorRes.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 })\n .catch((error) => {\n // if it's a dry run - exit with 0 status\n if (error.code === 'DRYRUN') {\n return error.message;\n }\n\n throw error;\n });\n\n return res;\n}\n\nfunction sendWizardAnalyticsData(answers): void {\n analytics.add(\n 'answers',\n Object.keys(answers)\n .map((key) => {\n // if we're looking at a reason, skip it\n if (key.indexOf('-reason') !== -1) {\n return;\n }\n\n // ignore misc questions, like \"add snyk test to package?\"\n if (key.indexOf('misc-') === 0) {\n return;\n }\n\n const answer = answers[key];\n const entry = {\n vulnId: answer.vuln.id,\n choice: answer.choice,\n from: answer.vuln.from.slice(1),\n } as any;\n\n if (answer.vuln.grouped) {\n entry.batchMain = !!answer.vuln.grouped.main;\n entry.batch = true;\n }\n\n return entry;\n })\n .filter(Boolean),\n );\n}\n","import { getVersion, isStandaloneBuild } from '../../lib/version';\n\nexport default async function version() {\n let version = await getVersion();\n if (isStandaloneBuild()) {\n version += ' (standalone)';\n }\n return version;\n}\n","import * as snyk from './';\nimport { makeRequest } from './request';\nimport config from './config';\n\nexport async function actionAllowed(\n action: string,\n options: { org?: string },\n): Promise<{ allowed: boolean; reason: string }> {\n const org = options.org || config.org || null;\n\n try {\n const res = await makeRequest({\n method: 'GET',\n url: config.API + '/authorization/' + action,\n json: true,\n headers: {\n authorization: 'token ' + snyk.api,\n },\n qs: org && { org },\n });\n\n return (res as any).body.result;\n } catch (err) {\n return {\n allowed: false,\n reason: 'There was an error while checking authorization',\n };\n }\n}\n","import { CustomError } from './custom-error';\n\nexport function MisconfiguredAuthInCI() {\n const errorMsg =\n 'Snyk is missing auth token in order to run inside CI. You must include ' +\n 'your API token as an environment value: `SNYK_TOKEN=12345678`';\n\n const error = new CustomError(errorMsg);\n error.code = 401;\n error.strCode = 'noAuthInCI';\n error.userMessage = errorMsg;\n return error;\n}\n"],"names":[],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"959.index.js","mappings":"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","sources":["webpack://snyk/./src/cli/commands/auth/is-authed.ts","webpack://snyk/./src/cli/commands/protect/prompts.ts","webpack://snyk/./src/cli/commands/protect/tasks.ts","webpack://snyk/./src/cli/commands/protect/wizard.ts","webpack://snyk/./src/cli/commands/version.ts","webpack://snyk/./src/lib/authorization.ts","webpack://snyk/./src/lib/errors/misconfigured-auth-in-ci-error.ts"],"sourcesContent":["import * as snyk from '../../../lib';\nimport config from '../../../lib/config';\nimport { makeRequest } from '../../../lib/request';\n\nexport function isAuthed() {\n const token = snyk.config.get('api');\n return verifyAPI(token).then((res: any) => {\n return res.body.ok;\n });\n}\n\nexport function verifyAPI(api) {\n const payload = {\n body: {\n api,\n },\n method: 'POST',\n url: config.API + '/verify/token',\n json: true,\n };\n\n return new Promise((resolve, reject) => {\n makeRequest(payload, (error, res, body) => {\n if (error) {\n return reject(error);\n }\n\n resolve({\n res,\n body,\n });\n });\n });\n}\n","import { PATH_SEPARATOR } from '../../../lib/constants';\n\nexport {\n getUpdatePrompts,\n getPatchPrompts,\n getIgnorePrompts,\n getPrompts,\n nextSteps,\n startOver,\n};\n\nconst cloneDeep = require('lodash.clonedeep');\nconst get = require('lodash.get');\nimport * as semver from 'semver';\nimport { format as fmt } from 'util';\nimport * as debugModule from 'debug';\nconst protect = require('../../../lib/protect');\nimport { parsePackageString as moduleToObject } from 'snyk-module';\nimport config from '../../../lib/config';\nimport * as snykPolicy from 'snyk-policy';\nimport chalk from 'chalk';\nimport { icon, color } from '../../../lib/theme';\nimport { AnnotatedIssue, SEVERITY } from '../../../lib/snyk-test/legacy';\nimport { colorTextBySeverity } from '../../../lib/snyk-test/common';\nimport { titleCaseText } from '../../../lib/formatters/legacy-format-issue';\n\nconst debug = debugModule('snyk');\n\nconst ignoreDisabledReasons = {\n notAdmin: 'Set to ignore (only administrators can ignore issues)',\n disregardFilesystemIgnores:\n 'Set to ignore (ignoring via the CLI is not enabled for this organization)',\n};\n\n// via http://stackoverflow.com/a/4760279/22617\nfunction sort(prop) {\n let sortOrder = 1;\n if (prop[0] === '-') {\n sortOrder = -1;\n prop = prop.substr(1);\n }\n\n return (a, b) => {\n const result = a[prop] < b[prop] ? -1 : a[prop] > b[prop] ? 1 : 0;\n return result * sortOrder;\n };\n}\n\nfunction createSeverityBasedIssueHeading(msg: string, severity: SEVERITY) {\n // Example: ✗ Medium severity vulnerability found in xmldom\n return colorTextBySeverity(severity, msg);\n}\n\nfunction sortUpgradePrompts(a, b) {\n let res = 0;\n\n // first sort by module affected\n if (!a.from[1]) {\n return -1;\n }\n\n if (!b.from[1]) {\n return 1;\n }\n\n const pa = moduleToObject(a.from[1]);\n const pb = moduleToObject(b.from[1]);\n res = sort('name')(pa, pb);\n if (res !== 0) {\n return res;\n }\n\n // we should have the same module, so the depth should be the same\n if (a.upgradePath[1] && b.upgradePath[1]) {\n // put upgrades ahead of patches\n if (b.upgradePath[1] === false) {\n return 1;\n }\n const pua = moduleToObject(a.upgradePath[1]);\n const pub = moduleToObject(b.upgradePath[1]);\n\n res = semver.compare(pua.version, pub.version) * -1;\n\n if (res !== 0) {\n return res;\n }\n } else {\n if (a.upgradePath[1]) {\n return -1;\n }\n\n if (b.upgradePath[1]) {\n return 1;\n }\n\n // if no upgrade, then hopefully a patch\n res = sort('publicationTime')(b, a);\n }\n\n return res;\n}\n\nfunction sortPatchPrompts(a, b) {\n let res = 0;\n\n // first sort by module affected\n const afrom = a.from.slice(1).pop();\n const bfrom = b.from.slice(1).pop();\n\n if (!afrom) {\n return -1;\n }\n\n if (!bfrom[1]) {\n return 1;\n }\n\n const pa = moduleToObject(afrom);\n const pb = moduleToObject(bfrom);\n res = sort('name')(pa, pb);\n if (res !== 0) {\n return res;\n }\n\n // if no upgrade, then hopefully a patch\n res = sort('publicationTime')(b, a);\n\n return res;\n}\n\nfunction stripInvalidPatches<T extends AnnotatedIssue>(vulns: T[]): T[] {\n // strip the irrelevant patches from the vulns at the same time, collect\n // the unique package vulns\n return vulns.map((vuln) => {\n // strip verbose meta\n delete vuln.description;\n delete vuln.credit;\n\n if (vuln.patches) {\n vuln.patches = vuln.patches.filter((patch) => {\n return semver.satisfies(vuln.version, patch.version);\n });\n\n // sort by patchModification, then pick the latest one\n vuln.patches = vuln.patches\n .sort((a, b) => {\n return b.modificationTime < a.modificationTime ? -1 : 1;\n })\n .slice(0, 1);\n\n // FIXME hack to give all the patches IDs if they don't already\n if (vuln.patches[0] && !vuln.patches[0].id) {\n vuln.patches[0].id = vuln.patches[0].urls[0]\n .split('/')\n .slice(-1)\n .pop() as string;\n }\n }\n\n return vuln;\n });\n}\n\nfunction getPrompts(vulns, policy) {\n return getUpdatePrompts(vulns, policy)\n .concat(getPatchPrompts(vulns, policy))\n .concat(getIgnorePrompts(vulns, policy));\n}\n\nfunction getPatchPrompts(\n vulns: AnnotatedIssue[],\n policy,\n options?: PromptOptions,\n): Prompt[] {\n debug('getPatchPrompts');\n if (!vulns || vulns.length === 0) {\n return [];\n }\n\n let res = stripInvalidPatches(cloneDeep(vulns)).filter((vuln) => {\n // if there's any upgrade available, then remove it\n return canBeUpgraded(vuln) || vuln.type === 'license' ? false : true;\n }) as AnnotatedIssue[];\n // sort by vulnerable package and the largest version\n res.sort(sortPatchPrompts);\n\n const copy = {};\n let offset = 0;\n // mutate our objects so we can try to group them\n // note that I use slice first becuase the `res` array will change length\n // and `reduce` _really_ doesn't like when you change the array under\n // it's feet\n // TODO(kyegupov): convert this reduce to a loop, make grouping logic more clear\n res.slice(0).reduce((acc, curr, i, all) => {\n // var upgrades = curr.upgradePath[1];\n // otherwise it's a patch and that's hidden for now\n if (curr.patches && curr.patches.length) {\n // TODO allow for cross over patches on modules (i.e. patch can work\n // on A-1 and A-2)\n let last;\n\n if (acc[curr.id]) {\n last = curr.id;\n } else {\n // try to find the right vuln id based on the publication times\n last = (\n all\n .filter((vuln) => {\n const patch = vuln.patches[0];\n\n // don't select the one we're looking at\n\n if (curr.id === vuln.id) {\n return false;\n }\n\n // only look at packages with the same name\n if (curr.name !== vuln.name || !patch) {\n return false;\n }\n\n // and ensure the patch can be applied to *our* module version\n if (semver.satisfies(curr.version, patch.version)) {\n // finally make sure the publicationTime is newer than the curr\n // vulnerability\n if (curr.publicationTime! < vuln.publicationTime!) {\n debug(\n 'found alternative location for %s@%s (%s by %s) in %s',\n curr.name,\n curr.version,\n patch.version,\n curr.id,\n vuln.id,\n );\n return true;\n }\n }\n })\n .shift() || curr\n ).id;\n }\n\n if (!acc[last]) {\n // only copy the biggest change\n copy[last] = cloneDeep(curr);\n acc[last] = curr;\n return acc;\n }\n\n // only happens on the 2nd time around\n if (!acc[last].grouped) {\n acc[last].grouped = {\n affected: moduleToObject(acc[last].name + '@' + acc[last].version),\n main: true,\n id: acc[last].id + '-' + i,\n count: 1,\n upgrades: [\n {\n // all this information is used when the user selects group patch\n // specifically: in ./tasks.js~42\n from: acc[last].from,\n filename: acc[last].__filename,\n patches: acc[last].patches,\n version: acc[last].version,\n },\n ],\n patch: true,\n };\n\n acc[last].grouped.affected.full = acc[last].name;\n\n // splice this vuln into the list again so if the user choses to review\n // they'll get this individual vuln and remediation\n copy[last].grouped = {\n main: false,\n requires: acc[last].grouped.id,\n };\n\n res.splice(i + offset, 0, copy[last]);\n offset++;\n }\n\n acc[last].grouped.count++;\n\n (curr as AnnotatedIssueWithGrouping).grouped = {\n main: false,\n requires: acc[last].grouped.id,\n };\n\n // add the from path to our group upgrades if we don't have it already\n const have = !!acc[last].grouped.upgrades.filter((upgrade) => {\n return upgrade.from.join(' ') === curr.from.join(' ');\n }).length;\n\n if (!have) {\n acc[last].grouped.upgrades.push({\n from: curr.from,\n filename: curr.__filename,\n patches: curr.patches,\n version: curr.version,\n });\n } else {\n if (!acc[last].grouped.includes) {\n acc[last].grouped.includes = [];\n }\n acc[last].grouped.includes.push(curr.id);\n }\n }\n\n return acc;\n }, {});\n\n // FIXME this should not just strip those that have an upgrade path, but\n // take into account the previous answers, and if the package has been\n // upgraded, it should be left *out* of our list.\n res = res.filter((curr) => {\n // if (curr.upgradePath[1]) {\n // return false;\n // }\n\n if (!curr.patches || curr.patches.length === 0) {\n return false;\n }\n\n return true;\n });\n\n const prompts = generatePrompt(res, policy, 'p', options);\n\n return prompts;\n}\n\nfunction getIgnorePrompts(vulns, policy, options?) {\n debug('getIgnorePrompts');\n if (!vulns || vulns.length === 0) {\n return [];\n }\n\n const res = stripInvalidPatches(cloneDeep(vulns)).filter((vuln) => {\n // remove all patches and updates\n\n // if there's any upgrade available\n if (canBeUpgraded(vuln)) {\n return false;\n }\n\n if (vuln.patches && vuln.patches.length) {\n return false;\n }\n\n return true;\n });\n\n const prompts = generatePrompt(res, policy, 'i', options);\n\n return prompts;\n}\n\n// This type was deduced from analyzing the code.\n// Exact types of fields and the grouping logic still need investigation and documentation.\ninterface AnnotatedIssueWithGrouping extends AnnotatedIssue {\n grouped?: {\n main;\n requires;\n affected?;\n count?;\n upgrades?;\n patch?;\n id?;\n };\n}\n\nfunction getUpdatePrompts(vulns: AnnotatedIssue[], policy, options?): Prompt[] {\n debug('getUpdatePrompts');\n if (!vulns || vulns.length === 0) {\n return [];\n }\n\n let res = stripInvalidPatches(cloneDeep(vulns)).filter((vuln) => {\n // only keep upgradeable\n return canBeUpgraded(vuln);\n }) as AnnotatedIssueWithGrouping[];\n\n // sort by vulnerable package and the largest version\n res.sort(sortUpgradePrompts);\n let copy: AnnotatedIssueWithGrouping | null = null;\n let offset = 0;\n // mutate our objects so we can try to group them\n // note that I use slice first becuase the `res` array will change length\n // and `reduce` _really_ doesn't like when you change the array under\n // it's feet\n // TODO(kyegupov): rewrite this reduce into more readable loop, avoid mutating original list,\n // understand and document the grouping logic\n res.slice(0).reduce((acc, curr, i) => {\n const from = curr.from[1] as string;\n\n if (!acc[from]) {\n // only copy the biggest change\n copy = cloneDeep(curr);\n acc[from] = curr;\n return acc;\n }\n\n const upgrades = curr.upgradePath.slice(-1).shift() as string;\n // otherwise it's a patch and that's hidden for now\n if (upgrades && curr.upgradePath[1]) {\n if (!acc[from].grouped) {\n acc[from].grouped = {\n affected: moduleToObject(from),\n main: true,\n id: acc[from].id + '-' + i,\n count: 1,\n upgrades: [],\n };\n acc[from].grouped.affected.full = from;\n\n // splice this vuln into the list again so if the user choses to review\n // they'll get this individual vuln and remediation\n copy!.grouped = {\n main: false,\n requires: acc[from].grouped.id,\n };\n\n res.splice(i + offset, 0, copy as AnnotatedIssueWithGrouping);\n offset++;\n }\n\n acc[from].grouped.count++;\n\n curr.grouped = {\n main: false,\n requires: acc[from].grouped.id,\n };\n\n const p = moduleToObject(upgrades);\n if (\n p.name !== acc[from].grouped.affected.name &&\n (' ' + acc[from].grouped.upgrades.join(' ') + ' ').indexOf(\n p.name + '@',\n ) === -1\n ) {\n debug('+ adding %s to upgrades', upgrades);\n acc[from].grouped.upgrades.push(upgrades);\n }\n }\n\n return acc;\n }, {});\n\n // now strip anything that doesn't have an upgrade path\n res = res.filter((curr) => {\n return !!curr.upgradePath[1];\n });\n\n const prompts = generatePrompt(res, policy, 'u', options);\n\n return prompts;\n}\n\nfunction canBeUpgraded(vuln) {\n if (vuln.parentDepType === 'extraneous') {\n return false;\n }\n\n if (vuln.bundled) {\n return false;\n }\n\n if (vuln.shrinkwrap) {\n return false;\n }\n\n return vuln.upgradePath.some((pkg, i) => {\n // if the upgade path is to upgrade the module to the same range the\n // user already asked for, then it means we need to just blow that\n // module away and re-install\n if (vuln.from.length > i && pkg === vuln.from[i]) {\n return true;\n }\n\n // if the upgradePath contains the first two elements, that is\n // the project itself (i.e. jsbin) then the direct dependency can be\n // upgraded. Note that if the first two elements\n if (vuln.upgradePath.slice(0, 2).filter(Boolean).length) {\n return true;\n }\n });\n}\n\ninterface Action {\n value: {};\n key?: string;\n name: string;\n short?: string;\n default?: boolean;\n meta?: any;\n}\n\ninterface Prompt {\n when?: (answers) => void;\n name: string;\n type?: string;\n message: string;\n\n // These fields are assigned later\n default?: number | boolean | string;\n choices?: any[];\n vuln?: any;\n patches?: any;\n}\n\ninterface PromptOptions {\n ignoreDisabled?: { reasonCode: string };\n earlyExit?: boolean;\n packageManager?: string;\n}\n\nfunction generatePrompt(\n vulns: AnnotatedIssueWithGrouping[],\n policy,\n prefix: string,\n options?: PromptOptions,\n): Prompt[] {\n if (!prefix) {\n prefix = '';\n }\n if (!vulns) {\n vulns = []; // being defensive, but maybe we should throw an error?\n }\n\n const skipAction = {\n value: 'skip', // the value that we get in our callback\n key: 's',\n name: 'Skip', // the text the user sees\n };\n\n const ignoreAction: Action = {\n value: options && options.ignoreDisabled ? 'skip' : 'ignore',\n key: 'i',\n meta: {\n // arbitrary data that we'll merged into the `value` later on\n days: 30,\n },\n short: 'Ignore',\n name:\n options && options.ignoreDisabled\n ? ignoreDisabledReasons[options.ignoreDisabled.reasonCode]\n : 'Set to ignore for 30 days (updates policy)',\n };\n\n const patchAction: Action = {\n value: 'patch',\n key: 'p',\n short: 'Patch',\n name:\n 'Patch (modifies files locally, updates policy for `snyk protect` ' +\n 'runs)',\n };\n\n const updateAction: Action = {\n value: 'update',\n key: 'u',\n short: 'Upgrade',\n name: '', // updated below to the name of the package to update\n };\n\n let prompts = vulns.map((vuln, i) => {\n let id = vuln.id || 'node-' + vuln.name + '@' + vuln.below;\n\n id += '-' + prefix + i;\n\n // make complete copies of the actions, otherwise we'll mutate the object\n const ignore = cloneDeep(ignoreAction);\n const skip = cloneDeep(skipAction);\n const patch = cloneDeep(patchAction);\n const update = cloneDeep(updateAction);\n const review: Action = {\n value: 'review',\n short: 'Review',\n name: 'Review issues separately',\n };\n\n const choices: Action[] = [];\n\n const from = vuln.from\n .slice(1)\n .filter(Boolean)\n .shift();\n\n // FIXME this should be handled a little more gracefully\n if (vuln.from.length === 1) {\n debug('Skipping issues in core package with no upgrade path: ' + id);\n }\n const vulnIn = vuln.from.slice(-1).pop();\n const severity = titleCaseText(vuln.severity);\n\n let infoLink = ' Info: ' + chalk.underline(config.ROOT);\n\n let messageIntro;\n let fromText: boolean | string = false;\n const group = vuln.grouped && vuln.grouped.main ? vuln.grouped : false;\n\n let originalSeverityStr = '';\n if (vuln.originalSeverity && vuln.originalSeverity !== vuln.severity) {\n originalSeverityStr = ` (originally ${titleCaseText(\n vuln.originalSeverity,\n )})`;\n }\n\n if (group) {\n infoLink += chalk.underline(\n '/package/npm/' + group.affected.name + '/' + group.affected.version,\n );\n const joiningText = group.patch ? 'in' : 'via';\n const issues = vuln.type === 'license' ? 'issues' : 'vulnerabilities';\n messageIntro = fmt(\n `${icon.ISSUE} %s %s %s introduced %s %s`,\n group.count,\n `${severity}${originalSeverityStr}`,\n issues,\n joiningText,\n group.affected.full,\n );\n messageIntro = createSeverityBasedIssueHeading(\n messageIntro,\n vuln.severity,\n );\n } else {\n infoLink += chalk.underline('/vuln/' + vuln.id);\n messageIntro = fmt(\n `${icon.ISSUE} %s severity %s found in %s, introduced via`,\n `${severity}${originalSeverityStr}`,\n vuln.type === 'license' ? 'issue' : 'vuln',\n vulnIn,\n from,\n );\n messageIntro = createSeverityBasedIssueHeading(\n messageIntro,\n vuln.severity,\n );\n messageIntro += '\\n Description: ' + vuln.title;\n fromText =\n from !== vuln.from.slice(1).join(PATH_SEPARATOR)\n ? ' From: ' + vuln.from.slice(1).join(PATH_SEPARATOR)\n : '';\n }\n\n let note: boolean | string = false;\n if (vuln.note) {\n if (group && group.patch) {\n // no-op\n } else {\n note = ' Note: ' + vuln.note;\n }\n }\n\n const res: Prompt = {\n when(answers) {\n let haventUpgraded = true;\n // only show this question if the user choose to review the details\n // of the vuln\n if (vuln.grouped && !vuln.grouped.main) {\n // find how they answered on the top level question\n const groupAnswer = Object.keys(answers)\n .map((key) => {\n if (answers[key].meta) {\n // this meta.groupId only appears on a \"review\" choice, and thus\n // this map will pick out those vulns that are specifically\n // associated with this review group.\n if (answers[key].meta.groupId === vuln.grouped!.requires) {\n if (\n answers[key].choice === 'ignore' &&\n answers[key].meta.review\n ) {\n answers[key].meta.vulnsInGroup.push({\n id: vuln.id,\n from: vuln.from,\n });\n return false;\n }\n\n return answers[key];\n }\n }\n return false;\n })\n .filter(Boolean);\n\n if (!groupAnswer.length) {\n debug('no group answer: show %s when %s', vuln.id, false);\n return false;\n }\n\n // if we've upgraded, then stop asking\n let updatedTo: Prompt | null = null;\n haventUpgraded =\n groupAnswer.filter((answer) => {\n if (answer.choice === 'update') {\n updatedTo = answer;\n return true;\n }\n }).length === 0;\n\n if (!haventUpgraded) {\n // echo out what would be upgraded\n const via =\n 'Fixed through previous upgrade instruction to ' +\n ((updatedTo as unknown) as Prompt).vuln.upgradePath[1];\n console.log(['', messageIntro, infoLink, via].join('\\n'));\n }\n }\n\n if (haventUpgraded) {\n console.log(''); // blank line between prompts...kinda lame, sorry\n }\n\n debug('final show %s when %s', vuln.id, res);\n\n return res; // true = show next\n },\n name: id,\n type: 'list',\n message: [\n messageIntro,\n infoLink,\n fromText,\n note,\n chalk.green('\\n Remediation options'),\n ]\n .filter(Boolean)\n .join('\\n'),\n };\n\n const upgradeAvailable = canBeUpgraded(vuln);\n const toPackage = vuln.upgradePath.filter(Boolean).shift();\n const isReinstall = toPackage === from;\n const isYarn = !!(options && options.packageManager === 'yarn');\n\n // note: the language presented the user is \"upgrade\" rather than \"update\"\n // this change came long after all this code was written. I've decided\n // *not* to update all the variables referring to `update`, but just\n // to warn my dear code-reader that this is intentional.\n\n // note: Yarn reinstallation does not currently work because the\n // remediation advice is actually for npm\n\n if (upgradeAvailable && (!isYarn || !isReinstall)) {\n choices.push(update);\n\n const word = isReinstall ? 'Re-install ' : 'Upgrade to ';\n\n update.short = word + toPackage;\n let out = word + toPackage;\n const toPackageVersion = moduleToObject(toPackage as string).version;\n const diff = semver.diff(\n moduleToObject(from as string).version,\n toPackageVersion,\n );\n let lead = '';\n const breaking = color.status.error('potentially breaking change');\n if (diff === 'major') {\n lead = ' (' + breaking + ', ';\n } else {\n lead = ' (';\n }\n\n lead += 'triggers upgrade to ';\n if (group && group.upgrades.length) {\n out += lead + group.upgrades.join(', ') + ')';\n } else {\n const last = vuln.upgradePath.slice(-1).shift();\n if (toPackage !== last) {\n out += lead + last + ')';\n } else if (diff === 'major') {\n out += ' (' + breaking + ')';\n }\n }\n update.name = out;\n } else {\n // No upgrade available (as per no patch)\n let reason = '';\n\n if (vuln.parentDepType === 'extraneous') {\n reason = fmt('extraneous package %s cannot be upgraded', vuln.from[1]);\n } else if (vuln.shrinkwrap) {\n reason = fmt(\n 'upgrade unavailable as %s@%s is shrinkwrapped by %s',\n vuln.name,\n vuln.version,\n vuln.shrinkwrap,\n );\n } else if (vuln.bundled) {\n reason = fmt(\n 'upgrade unavailable as %s is bundled in vulnerable %s',\n vuln.bundled.slice(-1).pop(),\n vuln.name,\n );\n } else {\n reason =\n \"no sufficient upgrade available we'll notify you when \" +\n 'there is one';\n }\n\n choices.push({\n value: 'skip',\n key: 'u',\n short: 'Upgrade (none available)',\n name: 'Upgrade (' + reason + ')',\n });\n }\n\n let patches = null;\n\n if (upgradeAvailable && group) {\n // no-op\n } else {\n if (vuln.patches && vuln.patches.length) {\n // check that the version we have has a patch available\n patches = protect.patchesForPackage(vuln);\n\n if (patches !== null) {\n if (!upgradeAvailable) {\n patch.default = true;\n }\n res.patches = patches;\n\n if (group) {\n patch.name = fmt('Patch the %s vulnerabilities', group.count);\n }\n\n choices.push(patch);\n }\n }\n }\n\n // only show patch option if this is NOT a grouped upgrade\n if (upgradeAvailable === false || !group) {\n if (patches === null) {\n // add a disabled option saying that patch isn't available\n // note that adding `disabled: true` does nothing, so the user can\n // actually select this option. I'm not 100% it's the right thing,\n // but we'll keep a keen eye on user feedback.\n choices.push({\n value: 'skip',\n key: 'p',\n short: 'Patch (none available)',\n name:\n \"Patch (no patch available, we'll notify you when \" +\n 'there is one)',\n });\n }\n }\n\n if (group) {\n review.meta = {\n groupId: group.id,\n review: true,\n };\n choices.push(review);\n\n ignore.meta.review = true;\n ignore.meta.groupId = group.id;\n ignore.meta.vulnsInGroup = [];\n }\n\n if (patches === null && !upgradeAvailable) {\n ignore.default = true;\n }\n\n choices.push(ignore);\n choices.push(skip);\n\n // look for a default - the `res.default` needs to be the index\n // of the choice, so we remap the choices to include the index, value of\n // choice and whether it was supposed to be a default. If the user is\n // updating their policy options, then we select the choice they had\n // before, otherwise we select the default\n res.default = (\n choices\n .map((choice, cIndex) => {\n return { i: cIndex, default: choice.default };\n })\n .filter((choice) => {\n return choice.default;\n })\n .shift() || { i: 0 }\n ).i;\n\n // kludge to make sure that we get the vuln in the user selection\n res.choices = choices.map((choice) => {\n const value = choice.value;\n // this allows us to pass more data into the inquirer results\n if (vuln.grouped && !vuln.grouped.main) {\n if (!choice.meta) {\n choice.meta = {};\n }\n choice.meta.groupId = vuln.grouped.requires;\n }\n choice.value = {\n meta: choice.meta,\n vuln,\n choice: value, // this is the string \"update\", \"ignore\", etc\n };\n return choice;\n });\n\n res.vuln = vuln;\n\n return res;\n });\n\n // zip together every prompt and a prompt asking \"why\", note that the `when`\n // callback controls whether not to prompt the user with this question,\n // in this case, we always show if the user choses to ignore.\n prompts = prompts.reduce((acc: Prompt[], curr) => {\n acc.push(curr);\n const rule = snykPolicy.getByVuln(policy, curr.choices![0].value.vuln);\n let defaultAnswer = 'None given';\n if (rule && rule.type === 'ignore') {\n defaultAnswer = rule.reason;\n }\n const issue =\n curr.choices![0].value.vuln &&\n curr.choices![0].value.vuln.type === 'license'\n ? 'issue'\n : 'vulnerability';\n acc.push({\n name: curr.name + '-reason',\n message: '[audit] Reason for ignoring ' + issue + '?',\n default: defaultAnswer,\n when(answers) {\n if (!answers[curr.name]) {\n return false;\n }\n return answers[curr.name].choice === 'ignore';\n },\n });\n return acc;\n }, []);\n\n return prompts;\n}\n\nfunction startOver() {\n return {\n name: 'misc-start-over',\n message:\n 'Existing .snyk policy found. Ignore it and start from scratch [y] or update it [N]?',\n type: 'confirm',\n default: false,\n };\n}\n\nfunction nextSteps(pkg, prevAnswers) {\n let skipProtect = false;\n const prompts: Prompt[] = [];\n let i;\n\n i = get(pkg, 'scripts.test', '').indexOf('snyk test');\n if (i === -1) {\n prompts.push({\n name: 'misc-add-test',\n message:\n 'Add `snyk test` to package.json file to fail test on newly ' +\n 'disclosed vulnerabilities?\\n' +\n 'This will require authentication via `snyk auth` when running tests.',\n type: 'confirm',\n default: false,\n });\n }\n\n // early exit if prevAnswers is false (when snyk test.ok === true)\n if (prevAnswers === false) {\n return prompts;\n }\n\n i = get(pkg, 'scripts.prepublish', '').indexOf('snyk-pro');\n\n // if `snyk protect` doesn't already appear, then check if we need to add it\n if (i === -1) {\n skipProtect = Object.keys(prevAnswers).every((key) => {\n return prevAnswers[key].choice !== 'patch';\n });\n } else {\n skipProtect = true;\n }\n\n if (!skipProtect) {\n prompts.push({\n name: 'misc-add-protect',\n message:\n 'Add `snyk protect` as a package.json installation hook to ' +\n 'apply chosen patches on install?',\n type: 'confirm',\n default: true,\n });\n }\n\n return prompts;\n}\n","import * as debugModule from 'debug';\nconst debug = debugModule('snyk');\nconst cloneDeep = require('lodash.clonedeep');\n\nexport default function answersToTasks(answers) {\n const tasks = {\n ignore: [],\n update: [],\n patch: [],\n skip: [],\n };\n\n Object.keys(answers).forEach((key) => {\n // if we're looking at a reason, skip it\n if (key.indexOf('-reason') !== -1) {\n return;\n }\n\n // ignore misc questions, like \"add snyk test to package?\"\n if (key.indexOf('misc-') === 0) {\n return;\n }\n\n const answer = answers[key];\n const task = answer.choice;\n if (task === 'review' || task === 'skip') {\n // task = 'skip';\n return;\n }\n\n const vuln = answer.vuln;\n\n if (task === 'patch' && vuln.grouped && vuln.grouped.upgrades) {\n // ignore the first as it's the same one as this particular answer\n debug(\n 'additional answers required: %s',\n vuln.grouped.count - 1,\n vuln.grouped,\n );\n\n const additional = vuln.grouped.upgrades.slice(1);\n\n additional.forEach((upgrade) => {\n const copy = cloneDeep(vuln);\n copy.from = upgrade.from;\n copy.__filename = upgrade.filename;\n copy.patches = upgrade.patches;\n copy.version = upgrade.version;\n tasks[task].push(copy);\n });\n }\n\n if (task === 'ignore') {\n answer.meta.reason = answers[key + '-reason'];\n if (answer.meta.vulnsInGroup) {\n // also ignore any in the group\n answer.meta.vulnsInGroup.forEach((vulnInGroup) => {\n tasks[task].push({\n meta: answer.meta,\n vuln: vulnInGroup,\n });\n });\n } else {\n tasks[task].push(answer);\n }\n } else {\n tasks[task].push(vuln);\n }\n });\n\n return tasks;\n}\n","import * as debugModule from 'debug';\nconst debug = debugModule('snyk');\n\nimport * as path from 'path';\nimport * as inquirer from '@snyk/inquirer';\nimport * as fs from 'fs';\nimport * as tryRequire from 'snyk-try-require';\nimport chalk from 'chalk';\nimport * as url from 'url';\nconst cloneDeep = require('lodash.clonedeep');\nconst get = require('lodash.get');\nimport { exec } from 'child_process';\nimport { apiTokenExists } from '../../../lib/api-token';\nimport * as auth from '../auth/is-authed';\nimport getVersion from '../version';\nimport * as allPrompts from './prompts';\nimport answersToTasks from './tasks';\nimport * as snyk from '../../../lib/';\nimport { monitor as snykMonitor } from '../../../lib/monitor';\nimport { isCI } from '../../../lib/is-ci';\nconst protect = require('../../../lib/protect');\nimport * as authorization from '../../../lib/authorization';\nimport config from '../../../lib/config';\nimport { spinner } from '../../../lib/spinner';\nimport * as analytics from '../../../lib/analytics';\nimport * as alerts from '../../../lib/alerts';\nimport npm, { getVersion as npmGetVersion } from '../../../lib/npm';\nimport * as detect from '../../../lib/detect';\nimport * as plugins from '../../../lib/plugins';\nimport { ModuleInfo as moduleInfo } from '../../../lib/module-info';\nimport { MisconfiguredAuthInCI } from '../../../lib/errors/misconfigured-auth-in-ci-error';\nimport { MissingTargetFileError } from '../../../lib/errors/missing-targetfile-error';\nimport * as pm from '../../../lib/package-managers';\nimport { icon, color } from '../../../lib/theme';\nimport {\n Options,\n MonitorMeta,\n MonitorResult,\n PackageJson,\n ProtectOptions,\n} from '../../../lib/types';\nimport { LegacyVulnApiResult } from '../../../lib/snyk-test/legacy';\nimport { MultiProjectResult } from '@snyk/cli-interface/legacy/plugin';\n\nexport default function wizard(options?: Options) {\n options = options || ({} as Options);\n options.org = options.org || config.org || null;\n\n return processPackageManager(options)\n .then(processWizardFlow)\n .catch((error) => Promise.reject(error));\n}\n\nasync function processPackageManager(options: Options) {\n const packageManager = detect.detectPackageManager(process.cwd(), options);\n\n const supportsWizard = pm.WIZARD_SUPPORTED_PACKAGE_MANAGERS.includes(\n packageManager,\n );\n if (!supportsWizard) {\n return Promise.reject(\n `Snyk wizard for ${pm.SUPPORTED_PACKAGE_MANAGER_NAME[packageManager]} projects is not currently supported`,\n );\n }\n\n const nodeModulesExist = fs.existsSync(path.join('.', 'node_modules'));\n if (!nodeModulesExist) {\n // throw a custom error\n throw new Error(\n \"Missing node_modules folder: we can't patch without having installed packages.\" +\n `\\nPlease run '${packageManager} install' first.`,\n );\n }\n\n return Promise.resolve(options);\n}\n\nasync function loadOrCreatePolicyFile(options: Options & ProtectOptions) {\n let policyFile;\n try {\n policyFile = await snyk.policy.load(options['policy-path'], options);\n return policyFile;\n } catch (error) {\n // if we land in the catch, but we're in interactive mode, then it means\n // the file hasn't been created yet, and that's fine, so we'll resolve\n // with an empty object\n if (error.code === 'ENOENT') {\n options.newPolicy = true;\n policyFile = snyk.policy.create();\n return policyFile;\n }\n\n throw error;\n }\n}\n\nasync function processWizardFlow(options) {\n spinner.sticky();\n const message = options['dry-run']\n ? '*** dry run ****'\n : '~~~~ LIVE RUN ~~~~';\n debug(message);\n const policyFile = await loadOrCreatePolicyFile(options);\n\n const authed = await auth.isAuthed();\n analytics.add('inline-auth', !authed);\n if (!authed && isCI()) {\n throw MisconfiguredAuthInCI();\n }\n\n apiTokenExists();\n const cliIgnoreAuthorization = await authorization.actionAllowed(\n 'cliIgnore',\n options,\n );\n\n options.ignoreDisabled = cliIgnoreAuthorization.allowed\n ? false\n : cliIgnoreAuthorization;\n if (options.ignoreDisabled) {\n debug('ignore disabled');\n }\n const intro = `Snyk's wizard will:\n\n* Enumerate your local dependencies and query Snyk's servers for vulnerabilities\n* Guide you through fixing found vulnerabilities\n* Create a .snyk policy file to guide snyk commands such as \\`test\\` and \\`protect\\`\n* Remember your dependencies to alert you when new vulnerabilities are disclosed\n`;\n\n return Promise.resolve(intro)\n .then((str) => {\n if (!isCI()) {\n console.log(str);\n }\n })\n .then(() => {\n return new Promise<void>((resolve) => {\n if (options.newPolicy) {\n return resolve(); // don't prompt to start over\n }\n inquirer.prompt(allPrompts.startOver()).then((answers) => {\n analytics.add('start-over', answers['misc-start-over']);\n if (answers['misc-start-over']) {\n options['ignore-policy'] = true;\n }\n resolve();\n });\n });\n })\n .then(() => {\n // We need to have modules information for remediation. See Payload.modules\n options.traverseNodeModules = true;\n\n return snyk.test(process.cwd(), options).then((oneOrManyRes) => {\n if (oneOrManyRes[0]) {\n throw new Error(\n 'Multiple subprojects are not yet supported by snyk wizard',\n );\n }\n const res = oneOrManyRes as LegacyVulnApiResult;\n if (alerts.hasAlert('tests-reached') && res.isPrivate) {\n return;\n }\n const packageFile = path.resolve(process.cwd(), 'package.json');\n if (!res.ok) {\n const vulns = res.vulnerabilities;\n const paths = vulns.length === 1 ? 'path' : 'paths';\n const ies = vulns.length === 1 ? 'y' : 'ies';\n // echo out the deps + vulns found\n console.log(\n 'Tested %s dependencies for known vulnerabilities, %s',\n res.dependencyCount,\n chalk.bold.red(\n 'found ' +\n res.uniqueCount +\n ' vulnerabilit' +\n ies +\n ', ' +\n vulns.length +\n ' vulnerable ' +\n paths +\n '.',\n ),\n );\n } else {\n console.log(\n color.status.success(\n `${icon.VALID} Tested %s dependencies for known vulnerabilities, no vulnerable paths found.`,\n ),\n res.dependencyCount,\n );\n }\n\n return snyk.policy.loadFromText(res.policy).then((combinedPolicy) => {\n return tryRequire(packageFile).then((pkg) => {\n options.packageLeading = pkg.leading;\n options.packageTrailing = pkg.trailing;\n return interactive(\n res,\n pkg,\n combinedPolicy,\n options,\n ).then((answers) => processAnswers(answers, policyFile, options));\n });\n });\n });\n });\n}\n\nexport function interactive(test, pkg, policy, options) {\n const vulns = test.vulnerabilities;\n if (!policy) {\n policy = {};\n }\n\n if (!pkg) {\n // only really happening in tests\n pkg = {};\n }\n\n return new Promise((resolve) => {\n debug('starting questions');\n const prompts = allPrompts.getUpdatePrompts(vulns, policy, options);\n resolve(inquire(prompts, {}));\n })\n .then((answers) => {\n const prompts = allPrompts.getPatchPrompts(vulns, policy, options);\n return inquire(prompts, answers);\n })\n .then((answers) => {\n const prompts = allPrompts.getIgnorePrompts(vulns, policy, options);\n return inquire(prompts, answers);\n })\n .then((answers) => {\n const prompts = allPrompts.nextSteps(pkg, test.ok ? false : answers);\n return inquire(prompts, answers);\n })\n .then((answers) => {\n if (pkg.shrinkwrap) {\n answers['misc-build-shrinkwrap'] = true;\n }\n return answers;\n });\n}\n\nexport function inquire(prompts, answers): Promise<{}> {\n if (prompts.length === 0) {\n return Promise.resolve(answers);\n }\n // inquirer will handle dots in name as path in hash (CSUP-272)\n prompts.forEach((prompt) => {\n prompt.name = prompt.name.replace(/\\./g, '--DOT--');\n });\n return new Promise((resolve) => {\n inquirer.prompt(prompts).then((theseAnswers) => {\n answers = { ...answers, ...theseAnswers };\n Object.keys(answers).forEach((answerName) => {\n if (answerName.indexOf('--DOT--') > -1) {\n const newName = answerName.replace(/--DOT--/g, '.');\n answers[newName] = answers[answerName];\n delete answers[answerName];\n }\n });\n resolve(answers);\n });\n });\n}\n\nfunction getNewScriptContent(scriptContent, cmd) {\n if (scriptContent) {\n // only add the command if it's not already in the script\n if (scriptContent.indexOf(cmd) === -1) {\n return cmd + ' && ' + scriptContent;\n }\n return scriptContent;\n }\n return cmd;\n}\n\nfunction addProtectScripts(existingScripts, npmVersion, options) {\n const scripts = existingScripts ? cloneDeep(existingScripts) : {};\n scripts['snyk-protect'] = 'snyk protect';\n\n let cmd = 'npm run snyk-protect';\n\n // legacy check for `postinstall`, if `npm run snyk-protect` is in there\n // we'll replace it with `true` so it can be cleanly swapped out\n const postinstall = scripts.postinstall;\n if (postinstall && postinstall.indexOf(cmd) !== -1) {\n scripts.postinstall = postinstall.replace(cmd, 'true');\n }\n\n if (options.packageManager === 'yarn') {\n cmd = 'yarn run snyk-protect';\n scripts.prepare = getNewScriptContent(scripts.prepare, cmd);\n return scripts;\n }\n\n const npmVersionMajor = parseInt(npmVersion.split('.')[0], 10);\n if (npmVersionMajor >= 5) {\n scripts.prepare = getNewScriptContent(scripts.prepare, cmd);\n\n return scripts;\n }\n\n scripts.prepublish = getNewScriptContent(scripts.prepublish, cmd);\n\n return scripts;\n}\n\nfunction calculatePkgFileIndentation(packageFile: string): number {\n let pkgIndentation = 2;\n const whitespaceMatch = packageFile.match(/{\\n(\\s+)\"/);\n if (whitespaceMatch && whitespaceMatch[1]) {\n pkgIndentation = whitespaceMatch[1].length;\n }\n return pkgIndentation;\n}\n\nexport function processAnswers(answers, policy, options) {\n if (!options) {\n options = {};\n }\n options.packageLeading = options.packageLeading || '';\n options.packageTrailing = options.packageTrailing || '';\n // allow us to capture the answers the users gave so we can combine this\n // the scenario running\n if (options.json) {\n return Promise.resolve(JSON.stringify(answers, null, 2));\n }\n const cwd = process.cwd();\n const packageFile = path.resolve(cwd, 'package.json');\n const packageManager = detect.detectPackageManager(cwd, options);\n const targetFile = options.file || detect.detectPackageFile(cwd);\n if (!targetFile) {\n throw MissingTargetFileError(cwd);\n }\n const isLockFileBased =\n targetFile.endsWith('package-lock.json') ||\n targetFile.endsWith('yarn.lock');\n\n let pkg = {} as PackageJson;\n let pkgIndentation = 2;\n\n sendWizardAnalyticsData(answers);\n\n const tasks = answersToTasks(answers);\n debug(tasks);\n\n const live = !options['dry-run'];\n let snykVersion = '*';\n\n const res = protect\n .generatePolicy(policy, tasks, live, options.packageManager)\n .then(async (policy2) => {\n if (!live) {\n // if this was a dry run, we'll throw an error to bail out of the\n // promise chain, then in the catch, check the error.code and if\n // it matches `DRYRUN` we'll return the text and not an error\n // (which avoids the exit code 1).\n const e = new Error('This was a dry run: nothing changed');\n (e as any).code = 'DRYRUN';\n throw e;\n }\n\n await policy2.save(cwd, spinner);\n\n // don't do this during testing\n if (isCI() || process.env.TAP) {\n return Promise.resolve();\n }\n\n return new Promise<void>((resolve) => {\n exec(\n 'git add .snyk',\n {\n cwd,\n },\n (error, stdout, stderr) => {\n if (error) {\n debug('error adding .snyk to git', error);\n }\n\n if (stderr) {\n debug('stderr adding .snyk to git', stderr.trim());\n }\n\n // resolve either way\n resolve();\n },\n );\n });\n })\n .then(() => {\n // re-read the package.json - because the generatePolicy can apply\n // an `npm install` which will change the deps\n return Promise.resolve(fs.readFileSync(packageFile, 'utf8'))\n .then((packageFileString) => {\n pkgIndentation = calculatePkgFileIndentation(packageFileString);\n return packageFileString;\n })\n .then(JSON.parse)\n .then((updatedPkg) => {\n pkg = updatedPkg;\n });\n })\n .then(getVersion)\n .then((v) => {\n debug('snyk version: %s', v);\n // little hack to circumvent local testing where the version will\n // be the git branch + commit\n if (v.match(/^\\d+\\./) === null) {\n v = '*';\n } else {\n v = '^' + v;\n }\n snykVersion = v;\n })\n .then(() => {\n analytics.add('add-snyk-test', answers['misc-add-test']);\n if (!answers['misc-add-test']) {\n return;\n }\n\n debug('adding `snyk test` to package');\n\n if (!pkg.scripts) {\n pkg.scripts = {};\n }\n\n const test = pkg.scripts.test;\n const cmd = 'snyk test';\n if (test && test !== 'echo \"Error: no test specified\" && exit 1') {\n // only add the test if it's not already in the test\n if (test.indexOf(cmd) === -1) {\n pkg.scripts.test = cmd + ' && ' + test;\n }\n } else {\n pkg.scripts.test = cmd;\n }\n })\n .then(async () => {\n const npmVersion = await npmGetVersion();\n analytics.add('add-snyk-protect', answers['misc-add-protect']);\n if (!answers['misc-add-protect']) {\n return;\n }\n\n debug('adding `snyk protect` to package');\n\n if (!pkg.scripts) {\n pkg.scripts = {};\n }\n\n pkg.scripts = addProtectScripts(pkg.scripts, npmVersion, options);\n\n pkg.snyk = true;\n })\n .then(() => {\n let lbl = 'Updating package.json...';\n const addSnykToDependencies =\n answers['misc-add-test'] || answers['misc-add-protect'];\n let updateSnykFunc = () => {\n return;\n }; // noop\n\n if (addSnykToDependencies) {\n updateSnykFunc = () => protect.install(packageManager, ['snyk'], live);\n }\n if (addSnykToDependencies) {\n debug('updating %s', packageFile);\n\n if (\n get(pkg, 'dependencies.snyk') ||\n get(pkg, 'peerDependencies.snyk') ||\n get(pkg, 'optionalDependencies.snyk')\n ) {\n // nothing to do as the user already has Snyk\n // TODO decide whether we should update the version being used\n // and how do we reconcile if the global install is older\n // than the local version?\n } else {\n const addSnykToProdDeps = answers['misc-add-protect'];\n const snykIsInDevDeps = get(pkg, 'devDependencies.snyk');\n\n if (addSnykToProdDeps) {\n if (!pkg.dependencies) {\n pkg.dependencies = {};\n }\n pkg.dependencies.snyk = snykVersion;\n lbl =\n 'Adding Snyk to production dependencies ' +\n '(used by snyk protect)';\n\n // but also check if we should remove it from devDependencies\n if (snykIsInDevDeps) {\n delete pkg.devDependencies.snyk;\n }\n } else if (!snykIsInDevDeps) {\n if (!pkg.devDependencies) {\n pkg.devDependencies = {};\n }\n lbl = 'Adding Snyk to devDependencies (used by npm test)';\n pkg.devDependencies.snyk = snykVersion;\n updateSnykFunc = () =>\n protect.installDev(packageManager, ['snyk'], live);\n }\n }\n }\n\n if (addSnykToDependencies || tasks.update.length) {\n const packageString =\n options.packageLeading +\n JSON.stringify(pkg, null, pkgIndentation) +\n options.packageTrailing;\n return (\n spinner(lbl)\n .then(() => {\n fs.writeFileSync(packageFile, packageString);\n if (isLockFileBased) {\n // we need to trigger a lockfile update after adding snyk\n // as a dep\n return updateSnykFunc();\n }\n })\n // clear spinner in case of success or failure\n .then(spinner.clear<void>(lbl))\n .catch((error) => {\n spinner.clear<void>(lbl)();\n throw error;\n })\n );\n }\n })\n .then(() => {\n if (answers['misc-build-shrinkwrap'] && tasks.update.length) {\n debug('updating shrinkwrap');\n\n const lbl = 'Updating npm-shrinkwrap.json...';\n return (\n spinner(lbl)\n .then(() => npm('shrinkwrap', null, live, cwd, null))\n // clear spinner in case of success or failure\n .then(spinner.clear(lbl))\n .catch((error) => {\n spinner.clear<void>(lbl)();\n throw error;\n })\n );\n }\n })\n .then(() => {\n if (answers['misc-test-no-monitor']) {\n // allows us to automate tests\n return {\n id: 'test',\n } as MonitorResult;\n }\n\n debug('running monitor');\n const lbl =\n 'Remembering current dependencies for future ' + 'notifications...';\n const meta = { method: 'wizard', packageManager };\n const plugin = plugins.loadPlugin(packageManager);\n const info = moduleInfo(plugin, options.policy);\n\n if (isLockFileBased) {\n // TODO: fix this by providing better patch support for yarn\n // yarn hoists packages up a tree so we can't assume their location\n // on disk without traversing node_modules\n // currently the npm@2 nd npm@3 plugin resolve-deps can do this\n // but not the latest node-lockfile-parser\n // HACK: for yarn set traverseNodeModules option to true\n // bypass lockfile test for wizard, but set this back\n // before we monitor\n options.traverseNodeModules = false;\n }\n\n // TODO: extract common inspect & monitor code and use the same way here\n // as during test & monitor\n return (\n info\n .inspect(cwd, targetFile, options)\n .then((inspectRes) => spinner(lbl).then(() => inspectRes))\n .then((inspectRes) => {\n // both ruby and node plugin return multi result\n return snykMonitor(\n cwd,\n meta as MonitorMeta,\n (inspectRes as MultiProjectResult).scannedProjects[0],\n options,\n inspectRes.plugin,\n );\n })\n // clear spinner in case of success or failure\n .then(spinner.clear(lbl))\n .catch((error) => {\n spinner.clear<void>(lbl)();\n throw error;\n })\n );\n })\n .then((monitorRes) => {\n const endpoint = url.parse(config.API);\n let leader = '';\n if (monitorRes.org) {\n leader = '/org/' + monitorRes.org;\n }\n endpoint.pathname = leader + '/monitor/' + monitorRes.id;\n const monitorUrl = url.format(endpoint);\n endpoint.pathname = leader + '/manage';\n const manageUrl = url.format(endpoint);\n\n return (\n (options.newPolicy\n ? // if it's a newly created file\n \"\\nYour policy file has been created with the actions you've \" +\n 'selected, add it to your source control (`git add .snyk`).'\n : // otherwise we updated it\n '\\nYour .snyk policy file has been successfully updated.') +\n '\\nTo review your policy, run `snyk policy`.\\n\\n' +\n 'You can see a snapshot of your dependencies here:\\n' +\n monitorUrl +\n '\\n\\n' +\n (monitorRes.isMonitored\n ? \"We'll notify you when relevant new vulnerabilities are \" +\n 'disclosed.\\n\\n'\n : chalk.bold.red(\n 'Project is inactive, so notifications are turned off.\\n' +\n 'Activate this project here: ' +\n manageUrl +\n '\\n',\n )) +\n (monitorRes.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 })\n .catch((error) => {\n // if it's a dry run - exit with 0 status\n if (error.code === 'DRYRUN') {\n return error.message;\n }\n\n throw error;\n });\n\n return res;\n}\n\nfunction sendWizardAnalyticsData(answers): void {\n analytics.add(\n 'answers',\n Object.keys(answers)\n .map((key) => {\n // if we're looking at a reason, skip it\n if (key.indexOf('-reason') !== -1) {\n return;\n }\n\n // ignore misc questions, like \"add snyk test to package?\"\n if (key.indexOf('misc-') === 0) {\n return;\n }\n\n const answer = answers[key];\n const entry = {\n vulnId: answer.vuln.id,\n choice: answer.choice,\n from: answer.vuln.from.slice(1),\n } as any;\n\n if (answer.vuln.grouped) {\n entry.batchMain = !!answer.vuln.grouped.main;\n entry.batch = true;\n }\n\n return entry;\n })\n .filter(Boolean),\n );\n}\n","import { getVersion, isStandaloneBuild } from '../../lib/version';\n\nexport default async function version() {\n let version = getVersion();\n if (isStandaloneBuild()) {\n version += ' (standalone)';\n }\n return version;\n}\n","import * as snyk from './';\nimport { makeRequest } from './request';\nimport config from './config';\n\nexport async function actionAllowed(\n action: string,\n options: { org?: string },\n): Promise<{ allowed: boolean; reason: string }> {\n const org = options.org || config.org || null;\n\n try {\n const res = await makeRequest({\n method: 'GET',\n url: config.API + '/authorization/' + action,\n json: true,\n headers: {\n authorization: 'token ' + snyk.api,\n },\n qs: org && { org },\n });\n\n return (res as any).body.result;\n } catch (err) {\n return {\n allowed: false,\n reason: 'There was an error while checking authorization',\n };\n }\n}\n","import { CustomError } from './custom-error';\n\nexport function MisconfiguredAuthInCI() {\n const errorMsg =\n 'Snyk is missing auth token in order to run inside CI. You must include ' +\n 'your API token as an environment value: `SNYK_TOKEN=12345678`';\n\n const error = new CustomError(errorMsg);\n error.code = 401;\n error.strCode = 'noAuthInCI';\n error.userMessage = errorMsg;\n return error;\n}\n"],"names":[],"sourceRoot":""}
|
package/dist/cli/index.js
CHANGED
|
@@ -27791,7 +27791,7 @@ function getMetrics(durationMs) {
|
|
|
27791
27791
|
}
|
|
27792
27792
|
async function getStandardData(args) {
|
|
27793
27793
|
const isStandalone = version.isStandaloneBuild();
|
|
27794
|
-
const snykVersion =
|
|
27794
|
+
const snykVersion = version.getVersion();
|
|
27795
27795
|
const seed = uuid_1.v4();
|
|
27796
27796
|
const shasum = crypto.createHash('sha1');
|
|
27797
27797
|
const environment = isStandalone
|
|
@@ -29398,31 +29398,6 @@ class ValidationError extends custom_error_1.CustomError {
|
|
|
29398
29398
|
exports.ValidationError = ValidationError;
|
|
29399
29399
|
|
|
29400
29400
|
|
|
29401
|
-
/***/ }),
|
|
29402
|
-
|
|
29403
|
-
/***/ 54052:
|
|
29404
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
29405
|
-
|
|
29406
|
-
"use strict";
|
|
29407
|
-
|
|
29408
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
29409
|
-
exports.executeCommand = void 0;
|
|
29410
|
-
const child_process_1 = __webpack_require__(63129);
|
|
29411
|
-
// TODO: is this different to child process exec?
|
|
29412
|
-
function executeCommand(cmd, root) {
|
|
29413
|
-
return new Promise((resolve, reject) => {
|
|
29414
|
-
child_process_1.exec(cmd, { cwd: root }, (err, stdout, stderr) => {
|
|
29415
|
-
const error = stderr.trim();
|
|
29416
|
-
if (error) {
|
|
29417
|
-
return reject(new Error(error + ' / ' + cmd));
|
|
29418
|
-
}
|
|
29419
|
-
resolve(stdout.split('\n').join(''));
|
|
29420
|
-
});
|
|
29421
|
-
});
|
|
29422
|
-
}
|
|
29423
|
-
exports.executeCommand = executeCommand;
|
|
29424
|
-
|
|
29425
|
-
|
|
29426
29401
|
/***/ }),
|
|
29427
29402
|
|
|
29428
29403
|
/***/ 10090:
|
|
@@ -29824,7 +29799,7 @@ async function makeRequest(payload) {
|
|
|
29824
29799
|
process.env.HTTPS_PROXY =
|
|
29825
29800
|
process.env.HTTPS_PROXY || process.env.https_proxy;
|
|
29826
29801
|
}
|
|
29827
|
-
const versionNumber =
|
|
29802
|
+
const versionNumber = version_1.getVersion();
|
|
29828
29803
|
const body = payload.body;
|
|
29829
29804
|
let data;
|
|
29830
29805
|
delete payload.body;
|
|
@@ -30409,29 +30384,10 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
30409
30384
|
exports.isStandaloneBuild = exports.getVersion = void 0;
|
|
30410
30385
|
const fs = __webpack_require__(35747);
|
|
30411
30386
|
const path = __webpack_require__(85622);
|
|
30412
|
-
|
|
30413
|
-
async function getVersion() {
|
|
30387
|
+
function getVersion() {
|
|
30414
30388
|
const root = path.resolve(__dirname, '../..');
|
|
30415
30389
|
const { version } = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8'));
|
|
30416
|
-
|
|
30417
|
-
return version;
|
|
30418
|
-
}
|
|
30419
|
-
try {
|
|
30420
|
-
const [branchName, commitStr, filesCount] = await Promise.all([
|
|
30421
|
-
exec_1.executeCommand('git rev-parse HEAD', root),
|
|
30422
|
-
exec_1.executeCommand('git rev-parse --abbrev-ref HEAD', root),
|
|
30423
|
-
exec_1.executeCommand('git diff --shortstat', root),
|
|
30424
|
-
]);
|
|
30425
|
-
const dirtyCount = parseInt(filesCount, 10) || 0;
|
|
30426
|
-
let curr = `${branchName}: ${commitStr}`;
|
|
30427
|
-
if (dirtyCount !== 0) {
|
|
30428
|
-
curr += ` (${dirtyCount} dirty files)`;
|
|
30429
|
-
}
|
|
30430
|
-
return curr;
|
|
30431
|
-
}
|
|
30432
|
-
catch (_err) {
|
|
30433
|
-
return 'unknown';
|
|
30434
|
-
}
|
|
30390
|
+
return version;
|
|
30435
30391
|
}
|
|
30436
30392
|
exports.getVersion = getVersion;
|
|
30437
30393
|
/**
|