socket 1.0.1 → 1.0.2

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.js CHANGED
@@ -18,11 +18,11 @@ var registry = require('../external/@socketsecurity/registry');
18
18
  var npm = require('../external/@socketsecurity/registry/lib/npm');
19
19
  var packages = require('../external/@socketsecurity/registry/lib/packages');
20
20
  var sorts = require('../external/@socketsecurity/registry/lib/sorts');
21
+ var strings = require('../external/@socketsecurity/registry/lib/strings');
21
22
  var path$1 = require('../external/@socketsecurity/registry/lib/path');
22
23
  var regexps = require('../external/@socketsecurity/registry/lib/regexps');
23
24
  var shadowNpmInject = require('./shadow-npm-inject.js');
24
25
  var fs$2 = require('../external/@socketsecurity/registry/lib/fs');
25
- var strings = require('../external/@socketsecurity/registry/lib/strings');
26
26
  var objects = require('../external/@socketsecurity/registry/lib/objects');
27
27
  var words = require('../external/@socketsecurity/registry/lib/words');
28
28
  var shadowNpmBin = require('./shadow-npm-bin.js');
@@ -3638,7 +3638,7 @@ const {
3638
3638
  RESOLUTIONS: RESOLUTIONS$1,
3639
3639
  VLT: VLT$5,
3640
3640
  YARN_BERRY: YARN_BERRY$4,
3641
- YARN_CLASSIC: YARN_CLASSIC$5
3641
+ YARN_CLASSIC: YARN_CLASSIC$4
3642
3642
  } = constants;
3643
3643
  function getOverridesDataBun(pkgEnvDetails, pkgJson = pkgEnvDetails.editablePkgJson.content) {
3644
3644
  const overrides = pkgJson?.[RESOLUTIONS$1] ?? {};
@@ -3690,11 +3690,27 @@ function getOverridesDataYarn(pkgEnvDetails, pkgJson = pkgEnvDetails.editablePkg
3690
3690
  function getOverridesDataYarnClassic(pkgEnvDetails, pkgJson = pkgEnvDetails.editablePkgJson.content) {
3691
3691
  const overrides = pkgJson?.[RESOLUTIONS$1] ?? {};
3692
3692
  return {
3693
- type: YARN_CLASSIC$5,
3693
+ type: YARN_CLASSIC$4,
3694
3694
  overrides
3695
3695
  };
3696
3696
  }
3697
- const overridesDataByAgent = new Map([[BUN$4, getOverridesDataBun], [NPM$8, getOverridesDataNpm], [PNPM$8, getOverridesDataPnpm], [VLT$5, getOverridesDataVlt], [YARN_BERRY$4, getOverridesDataYarn], [YARN_CLASSIC$5, getOverridesDataYarnClassic]]);
3697
+ function getOverridesData(pkgEnvDetails, pkgJson) {
3698
+ switch (pkgEnvDetails.agent) {
3699
+ case BUN$4:
3700
+ return getOverridesDataBun(pkgEnvDetails, pkgJson);
3701
+ case PNPM$8:
3702
+ return getOverridesDataPnpm(pkgEnvDetails, pkgJson);
3703
+ case VLT$5:
3704
+ return getOverridesDataVlt(pkgEnvDetails, pkgJson);
3705
+ case YARN_BERRY$4:
3706
+ return getOverridesDataYarn(pkgEnvDetails, pkgJson);
3707
+ case YARN_CLASSIC$4:
3708
+ return getOverridesDataYarnClassic(pkgEnvDetails, pkgJson);
3709
+ case NPM$8:
3710
+ default:
3711
+ return getOverridesDataNpm(pkgEnvDetails, pkgJson);
3712
+ }
3713
+ }
3698
3714
 
3699
3715
  const noopHandler = () => {};
3700
3716
  async function agentFix(pkgEnvDetails, actualTree, alertsMap, installer, {
@@ -3744,7 +3760,6 @@ async function agentFix(pkgEnvDetails, actualTree, alertsMap, installer, {
3744
3760
  // Process the workspace root last since it will add an override to package.json.
3745
3761
  pkgEnvDetails.editablePkgJson.filename];
3746
3762
  const sortedInfoEntries = Array.from(infoByPartialPurl.entries()).sort((a, b) => sorts.naturalCompare(a[0], b[0]));
3747
- const getOverridesData = overridesDataByAgent.get(pkgEnvDetails.agent);
3748
3763
  const cleanupInfoEntriesLoop = () => {
3749
3764
  logger.logger.dedent();
3750
3765
  spinner?.dedent();
@@ -3878,10 +3893,16 @@ async function agentFix(pkgEnvDetails, actualTree, alertsMap, installer, {
3878
3893
  }
3879
3894
  continue infosLoop;
3880
3895
  }
3881
- const oldOverrides = getOverridesData(pkgEnvDetails, editablePkgJson.content);
3882
- const overrideKey = `${name}@${vulnerableVersionRange}`;
3883
- const newVersionRange = utils.applyRange(oldOverrides?.[overrideKey] ?? oldVersion, newVersion, rangeStyle);
3884
- const newId = `${name}@${newVersionRange}`;
3896
+ const {
3897
+ overrides: oldOverrides
3898
+ } = getOverridesData(pkgEnvDetails, editablePkgJson.content);
3899
+ let refRange = oldOverrides?.[`${name}@${vulnerableVersionRange}`];
3900
+ if (!strings.isNonEmptyString(refRange)) {
3901
+ refRange = oldOverrides?.[name];
3902
+ }
3903
+ if (!strings.isNonEmptyString(refRange)) {
3904
+ refRange = oldVersion;
3905
+ }
3885
3906
 
3886
3907
  // eslint-disable-next-line no-await-in-loop
3887
3908
  await beforeInstall(editablePkgJson, name, oldVersion, newVersion, vulnerableVersionRange, options);
@@ -3902,6 +3923,7 @@ async function agentFix(pkgEnvDetails, actualTree, alertsMap, installer, {
3902
3923
  hasAnnouncedWorkspace = true;
3903
3924
  workspaceLogCallCount = logger.logger.logCallCount;
3904
3925
  }
3926
+ const newId = `${name}@${utils.applyRange(refRange, newVersion, rangeStyle)}`;
3905
3927
  spinner?.start();
3906
3928
  spinner?.info(`Installing ${newId} in ${workspace}.`);
3907
3929
  let error;
@@ -4452,6 +4474,7 @@ const {
4452
4474
  async function handleFix({
4453
4475
  autoMerge,
4454
4476
  cwd,
4477
+ ghsas,
4455
4478
  limit,
4456
4479
  outputKind,
4457
4480
  purls,
@@ -4459,31 +4482,69 @@ async function handleFix({
4459
4482
  test,
4460
4483
  testScript
4461
4484
  }) {
4462
- const pkgEnvResult = await utils.detectAndValidatePackageEnvironment(cwd, {
4485
+ let {
4486
+ length: ghsasCount
4487
+ } = ghsas;
4488
+ if (ghsasCount) {
4489
+ // Lazily access constants.spinner.
4490
+ const {
4491
+ spinner
4492
+ } = constants;
4493
+ spinner.start();
4494
+ if (ghsasCount === 1 && ghsas[0] === 'auto') {
4495
+ const autoCResult = await utils.spawnCoana(['compute-fixes-and-upgrade-purls', cwd], {
4496
+ cwd,
4497
+ spinner
4498
+ });
4499
+ if (autoCResult.ok) {
4500
+ ghsas = utils.cmdFlagValueToArray(/(?<=Vulnerabilities found: )[^\n]+/.exec(autoCResult.data)?.[0]);
4501
+ ghsasCount = ghsas.length;
4502
+ } else {
4503
+ ghsas = [];
4504
+ ghsasCount = 0;
4505
+ }
4506
+ }
4507
+ spinner.stop();
4508
+ if (ghsasCount) {
4509
+ spinner.start();
4510
+ await outputFixResult(await utils.spawnCoana(['compute-fixes-and-upgrade-purls', cwd, '--apply-fixes-to', ...ghsas], {
4511
+ cwd,
4512
+ spinner
4513
+ }), outputKind);
4514
+ spinner.stop();
4515
+ return;
4516
+ }
4517
+ }
4518
+ const pkgEnvCResult = await utils.detectAndValidatePackageEnvironment(cwd, {
4463
4519
  cmdName: CMD_NAME$1,
4464
4520
  logger: logger.logger
4465
4521
  });
4466
- if (!pkgEnvResult.ok) {
4467
- return pkgEnvResult;
4522
+ if (!pkgEnvCResult.ok) {
4523
+ await outputFixResult(pkgEnvCResult, outputKind);
4524
+ return;
4468
4525
  }
4469
- const pkgEnvDetails = pkgEnvResult.data;
4526
+ const {
4527
+ data: pkgEnvDetails
4528
+ } = pkgEnvCResult;
4470
4529
  if (!pkgEnvDetails) {
4471
- return {
4530
+ await outputFixResult({
4472
4531
  ok: false,
4473
4532
  message: 'No package found',
4474
4533
  cause: `No valid package environment was found in given cwd (${cwd})`
4475
- };
4534
+ }, outputKind);
4535
+ return;
4476
4536
  }
4477
4537
  logger.logger.info(`Fixing packages for ${pkgEnvDetails.agent} v${pkgEnvDetails.agentVersion}.\n`);
4478
4538
  const {
4479
4539
  agent
4480
4540
  } = pkgEnvDetails;
4481
4541
  if (agent !== NPM$7 && agent !== PNPM$6) {
4482
- return {
4542
+ await outputFixResult({
4483
4543
  ok: false,
4484
4544
  message: 'Not supported',
4485
4545
  cause: `${agent} is not supported by this command at the moment.`
4486
- };
4546
+ }, outputKind);
4547
+ return;
4487
4548
  }
4488
4549
 
4489
4550
  // Lazily access spinner.
@@ -4491,7 +4552,7 @@ async function handleFix({
4491
4552
  spinner
4492
4553
  } = constants;
4493
4554
  const fixer = agent === NPM$7 ? npmFix : pnpmFix;
4494
- const result = await fixer(pkgEnvDetails, {
4555
+ await outputFixResult(await fixer(pkgEnvDetails, {
4495
4556
  autoMerge,
4496
4557
  cwd,
4497
4558
  limit,
@@ -4500,8 +4561,7 @@ async function handleFix({
4500
4561
  spinner,
4501
4562
  test,
4502
4563
  testScript
4503
- });
4504
- await outputFixResult(result, outputKind);
4564
+ }), outputKind);
4505
4565
  }
4506
4566
 
4507
4567
  const {
@@ -4523,6 +4583,12 @@ const config$H = {
4523
4583
  default: false,
4524
4584
  description: `Shorthand for --autoMerge --test`
4525
4585
  },
4586
+ ghsa: {
4587
+ type: 'string',
4588
+ default: [],
4589
+ description: `Provide a list of ${vendor.terminalLinkExports('GHSA IDs', 'https://docs.github.com/en/code-security/security-advisories/working-with-global-security-advisories-from-the-github-advisory-database/about-the-github-advisory-database#about-ghsa-ids')} to compute fixes for, as either a comma separated value or as multiple flags`,
4590
+ isMultiple: true
4591
+ },
4526
4592
  limit: {
4527
4593
  type: 'number',
4528
4594
  default: Infinity,
@@ -4531,7 +4597,7 @@ const config$H = {
4531
4597
  purl: {
4532
4598
  type: 'string',
4533
4599
  default: [],
4534
- description: `Provide a list of ${vendor.terminalLinkExports('package URLs', 'https://github.com/package-url/purl-spec?tab=readme-ov-file#purl')} (PURLs) to fix, as either a comma separated value or as multiple flags,\n instead of querying the Socket API`,
4600
+ description: `Provide a list of ${vendor.terminalLinkExports('PURLs', 'https://github.com/package-url/purl-spec?tab=readme-ov-file#purl')} to compute fixes for, as either a comma separated value or as multiple flags,\n instead of querying the Socket API`,
4535
4601
  isMultiple: true,
4536
4602
  shortFlag: 'p'
4537
4603
  },
@@ -4621,12 +4687,14 @@ async function run$H(argv, importMeta, {
4621
4687
  autoMerge = true;
4622
4688
  test = true;
4623
4689
  }
4690
+ const ghsas = utils.cmdFlagValueToArray(cli.flags['ghsa']);
4624
4691
  const limit = (cli.flags['limit'] ? parseInt(String(cli.flags['limit'] || ''), 10) : Infinity) || Infinity;
4625
- const purls = Array.isArray(cli.flags['purl']) ? cli.flags['purl'].flatMap(p => p.split(/, */)) : [];
4692
+ const purls = utils.cmdFlagValueToArray(cli.flags['purl']);
4626
4693
  const testScript = String(cli.flags['testScript'] || 'test');
4627
4694
  await handleFix({
4628
4695
  autoMerge,
4629
4696
  cwd,
4697
+ ghsas,
4630
4698
  limit,
4631
4699
  outputKind,
4632
4700
  purls,
@@ -6918,7 +6986,7 @@ const {
6918
6986
  PNPM: PNPM$4,
6919
6987
  VLT: VLT$4,
6920
6988
  YARN_BERRY: YARN_BERRY$3,
6921
- YARN_CLASSIC: YARN_CLASSIC$4
6989
+ YARN_CLASSIC: YARN_CLASSIC$3
6922
6990
  } = constants;
6923
6991
  function matchLsCmdViewHumanStdout(stdout, name) {
6924
6992
  return stdout.includes(` ${name}@`);
@@ -6926,7 +6994,7 @@ function matchLsCmdViewHumanStdout(stdout, name) {
6926
6994
  function matchQueryCmdStdout(stdout, name) {
6927
6995
  return stdout.includes(`"${name}"`);
6928
6996
  }
6929
- const depsIncludesByAgent = new Map([[BUN$3, matchLsCmdViewHumanStdout], [NPM$5, matchQueryCmdStdout], [PNPM$4, matchQueryCmdStdout], [VLT$4, matchQueryCmdStdout], [YARN_BERRY$3, matchLsCmdViewHumanStdout], [YARN_CLASSIC$4, matchLsCmdViewHumanStdout]]);
6997
+ const depsIncludesByAgent = new Map([[BUN$3, matchLsCmdViewHumanStdout], [NPM$5, matchQueryCmdStdout], [PNPM$4, matchQueryCmdStdout], [VLT$4, matchQueryCmdStdout], [YARN_BERRY$3, matchLsCmdViewHumanStdout], [YARN_CLASSIC$3, matchLsCmdViewHumanStdout]]);
6930
6998
 
6931
6999
  function getDependencyEntries(pkgEnvDetails) {
6932
7000
  const {
@@ -6959,7 +7027,7 @@ const {
6959
7027
  PNPM: PNPM$3,
6960
7028
  VLT: VLT$3,
6961
7029
  YARN_BERRY: YARN_BERRY$2,
6962
- YARN_CLASSIC: YARN_CLASSIC$3
7030
+ YARN_CLASSIC: YARN_CLASSIC$2
6963
7031
  } = constants;
6964
7032
  function includesNpm(lockSrc, name) {
6965
7033
  // Detects the package name in the following cases:
@@ -7001,7 +7069,7 @@ function includesYarn(lockSrc, name) {
7001
7069
  // , name@
7002
7070
  `(?<=(?:^\\s*|,\\s*)"?)${escapedName}(?=@)`, 'm').test(lockSrc);
7003
7071
  }
7004
- const lockfileIncludesByAgent = new Map([[BUN$2, includesBun], [NPM$4, includesNpm], [PNPM$3, includesPnpm], [VLT$3, includesVlt], [YARN_BERRY$2, includesYarn], [YARN_CLASSIC$3, includesYarn]]);
7072
+ const lockfileIncludesByAgent = new Map([[BUN$2, includesBun], [NPM$4, includesNpm], [PNPM$3, includesPnpm], [VLT$3, includesVlt], [YARN_BERRY$2, includesYarn], [YARN_CLASSIC$2, includesYarn]]);
7005
7073
 
7006
7074
  const {
7007
7075
  BUN: BUN$1,
@@ -7009,7 +7077,7 @@ const {
7009
7077
  PNPM: PNPM$2,
7010
7078
  VLT: VLT$2,
7011
7079
  YARN_BERRY: YARN_BERRY$1,
7012
- YARN_CLASSIC: YARN_CLASSIC$2
7080
+ YARN_CLASSIC: YARN_CLASSIC$1
7013
7081
  } = constants;
7014
7082
  function cleanupQueryStdout(stdout) {
7015
7083
  if (stdout === '') {
@@ -7138,7 +7206,7 @@ async function lsYarnClassic(pkgEnvDetails, cwd) {
7138
7206
  } catch {}
7139
7207
  return '';
7140
7208
  }
7141
- const lsByAgent = new Map([[BUN$1, lsBun], [NPM$3, lsNpm], [PNPM$2, lsPnpm], [VLT$2, lsVlt], [YARN_BERRY$1, lsYarnBerry], [YARN_CLASSIC$2, lsYarnClassic]]);
7209
+ const lsByAgent = new Map([[BUN$1, lsBun], [NPM$3, lsNpm], [PNPM$2, lsPnpm], [VLT$2, lsVlt], [YARN_BERRY$1, lsYarnBerry], [YARN_CLASSIC$1, lsYarnClassic]]);
7142
7210
 
7143
7211
  const CMD_NAME = 'socket optimize';
7144
7212
 
@@ -7150,7 +7218,7 @@ const {
7150
7218
  RESOLUTIONS,
7151
7219
  VLT: VLT$1,
7152
7220
  YARN_BERRY,
7153
- YARN_CLASSIC: YARN_CLASSIC$1
7221
+ YARN_CLASSIC
7154
7222
  } = constants;
7155
7223
  const depFields = ['dependencies', 'devDependencies', 'peerDependencies', 'peerDependenciesMeta', 'optionalDependencies', 'bundleDependencies'];
7156
7224
  function getEntryIndexes(entries, keys) {
@@ -7252,12 +7320,11 @@ function updateResolutionsField(pkgEnvDetails, overrides) {
7252
7320
  function updatePnpmField(pkgEnvDetails, overrides) {
7253
7321
  updatePkgJsonField(pkgEnvDetails.editablePkgJson, PNPM$1, overrides);
7254
7322
  }
7255
- const updateManifestByAgent = new Map([[BUN, updateResolutionsField], [NPM$2, updateOverridesField], [PNPM$1, updatePnpmField], [VLT$1, updateOverridesField], [YARN_BERRY, updateResolutionsField], [YARN_CLASSIC$1, updateResolutionsField]]);
7323
+ const updateManifestByAgent = new Map([[BUN, updateResolutionsField], [NPM$2, updateOverridesField], [PNPM$1, updatePnpmField], [VLT$1, updateOverridesField], [YARN_BERRY, updateResolutionsField], [YARN_CLASSIC, updateResolutionsField]]);
7256
7324
 
7257
7325
  const {
7258
7326
  NPM: NPM$1,
7259
- PNPM,
7260
- YARN_CLASSIC
7327
+ PNPM
7261
7328
  } = constants;
7262
7329
  const manifestNpmOverrides = registry.getManifestData(NPM$1);
7263
7330
  async function addOverrides(pkgEnvDetails, pkgPath, options) {
@@ -7297,9 +7364,9 @@ async function addOverrides(pkgEnvDetails, pkgPath, options) {
7297
7364
  }
7298
7365
  const overridesDataObjects = [];
7299
7366
  if (isWorkspace || pkgEnvDetails.editablePkgJson.content['private']) {
7300
- overridesDataObjects.push(overridesDataByAgent.get(agent)(pkgEnvDetails));
7367
+ overridesDataObjects.push(getOverridesData(pkgEnvDetails));
7301
7368
  } else {
7302
- overridesDataObjects.push(overridesDataByAgent.get(NPM$1)(pkgEnvDetails), overridesDataByAgent.get(YARN_CLASSIC)(pkgEnvDetails));
7369
+ overridesDataObjects.push(getOverridesDataNpm(pkgEnvDetails), getOverridesDataYarnClassic(pkgEnvDetails));
7303
7370
  }
7304
7371
  spinner?.setText(`Adding overrides to ${workspace}...`);
7305
7372
  const depAliasMap = new Map();
@@ -12217,30 +12284,17 @@ const {
12217
12284
  DOT_SOCKET_DOT_FACTS_JSON
12218
12285
  } = constants;
12219
12286
  async function scanReachability(argv, cwd) {
12220
- try {
12221
- const result = await spawn.spawn(constants.execPath, [
12222
- // Lazily access constants.nodeNoWarningsFlags.
12223
- ...constants.nodeNoWarningsFlags,
12224
- // Lazily access constants.coanaBinPath.
12225
- constants.coanaBinPath, 'run', cwd, '--output-dir', cwd, '--socket-mode', DOT_SOCKET_DOT_FACTS_JSON, '--disable-report-submission', ...argv], {
12226
- cwd,
12227
- env: {
12228
- ...process.env,
12229
- SOCKET_CLI_API_TOKEN: utils.getDefaultToken()
12230
- }
12231
- });
12232
- return {
12233
- ok: true,
12234
- data: result.stdout.trim()
12235
- };
12236
- } catch (e) {
12237
- const message = e?.stdout ?? e?.message;
12238
- return {
12239
- ok: false,
12240
- data: e,
12241
- message
12242
- };
12243
- }
12287
+ // Lazily access constants.spinner.
12288
+ const {
12289
+ spinner
12290
+ } = constants;
12291
+ spinner.start();
12292
+ const result = await utils.spawnCoana(['run', cwd, '--output-dir', cwd, '--socket-mode', DOT_SOCKET_DOT_FACTS_JSON, '--disable-report-submission', ...argv], {
12293
+ cwd,
12294
+ spinner
12295
+ });
12296
+ spinner.stop();
12297
+ return result;
12244
12298
  }
12245
12299
 
12246
12300
  async function handleScanReach(argv, cwd, outputKind) {
@@ -14070,5 +14124,5 @@ void (async () => {
14070
14124
  await utils.captureException(e);
14071
14125
  }
14072
14126
  })();
14073
- //# debugId=2d2b9a8c-0021-4a50-be2d-f6b89034705e
14127
+ //# debugId=214e9941-f13a-4601-a726-83de349925db
14074
14128
  //# sourceMappingURL=cli.js.map