socket 0.14.30 → 0.14.32
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/module-sync/cli.js +128 -105
- package/dist/module-sync/constants.d.ts +2 -1
- package/dist/module-sync/constants.js +18 -10
- package/dist/module-sync/link.js +15 -3
- package/dist/module-sync/npm-cli.js +21 -9
- package/dist/module-sync/npm-injection.js +394 -178
- package/dist/module-sync/npx-cli.js +19 -7
- package/dist/module-sync/path-resolve.js +17 -5
- package/dist/module-sync/sdk.d.ts +1 -2
- package/dist/module-sync/sdk.js +42 -32
- package/dist/module-sync/vendor.js +82 -0
- package/dist/require/cli.js +93 -69
- package/dist/require/constants.d.ts +2 -1
- package/dist/require/constants.js +19 -6
- package/dist/require/link.js +15 -3
- package/dist/require/npm-cli.js +19 -7
- package/dist/require/npm-injection.js +156 -175
- package/dist/require/npx-cli.js +17 -5
- package/dist/require/path-resolve.js +17 -5
- package/dist/require/sdk.d.ts +1 -2
- package/dist/require/sdk.js +36 -26
- package/dist/require/vendor.js +23 -11
- package/package.json +5 -3
- package/translations.json +1 -1
|
@@ -1,17 +1,29 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
function _interop(e) {
|
|
4
|
+
let d
|
|
5
|
+
if (e) {
|
|
6
|
+
let c = 0
|
|
7
|
+
for (const k in e) {
|
|
8
|
+
d = c++ === 0 && k === 'default' ? e[k] : void 0
|
|
9
|
+
if (!d) break
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return d ?? e
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
var require$$0 = _interop(require('node:fs'));
|
|
16
|
+
var require$$1 = _interop(require('node:path'));
|
|
17
|
+
var require$$2 = _interop(require('@socketsecurity/registry/lib/env'));
|
|
18
|
+
var require$$3 = _interop(require('@socketsecurity/registry/lib/constants'));
|
|
19
|
+
var require$$4 = _interop(require('semver'));
|
|
8
20
|
|
|
9
21
|
var constants = {};
|
|
10
22
|
|
|
11
23
|
Object.defineProperty(constants, "__esModule", {
|
|
12
24
|
value: true
|
|
13
25
|
});
|
|
14
|
-
constants.synpBinPath = constants.shadowBinPath = constants.rootPkgJsonPath = constants.rootPath = constants.rootDistPath = constants.rootBinPath = constants.nmBinPath = constants.distPath = constants.cdxgenBinPath = constants.UPDATE_SOCKET_OVERRIDES_IN_PACKAGE_LOCK_FILE = constants.SUPPORTS_SYNC_ESM = constants.SOCKET_CLI_ISSUES_URL = constants.NPM_REGISTRY_URL = constants.LOOP_SENTINEL = constants.ENV = constants.DIST_TYPE = constants.API_V0_URL = void 0;
|
|
26
|
+
constants.synpBinPath = constants.shadowBinPath = constants.rootPkgJsonPath = constants.rootPath = constants.rootDistPath = constants.rootBinPath = constants.nmBinPath = constants.distPath = constants.cdxgenBinPath = constants.UPDATE_SOCKET_OVERRIDES_IN_PACKAGE_LOCK_FILE = constants.SUPPORTS_SYNC_ESM = constants.SOCKET_PUBLIC_API_KEY = constants.SOCKET_CLI_ISSUES_URL = constants.NPM_REGISTRY_URL = constants.LOOP_SENTINEL = constants.ENV = constants.DIST_TYPE = constants.API_V0_URL = void 0;
|
|
15
27
|
var _nodeFs = require$$0;
|
|
16
28
|
var _nodePath = require$$1;
|
|
17
29
|
var _env = require$$2;
|
|
@@ -25,6 +37,7 @@ constants.API_V0_URL = 'https://api.socket.dev/v0';
|
|
|
25
37
|
const DIST_TYPE = constants.DIST_TYPE = SUPPORTS_SYNC_ESM ? 'module-sync' : 'require';
|
|
26
38
|
constants.LOOP_SENTINEL = 1_000_000;
|
|
27
39
|
constants.NPM_REGISTRY_URL = 'https://registry.npmjs.org';
|
|
40
|
+
constants.SOCKET_PUBLIC_API_KEY = 'sktsec_t_--RAN5U4ivauy4w37-6aoKyYPDt5ZbaT5JBVMqiwKo_api';
|
|
28
41
|
const SOCKET_CLI_ISSUES_URL = constants.SOCKET_CLI_ISSUES_URL = 'https://github.com/SocketDev/socket-cli/issues';
|
|
29
42
|
const UPDATE_SOCKET_OVERRIDES_IN_PACKAGE_LOCK_FILE = constants.UPDATE_SOCKET_OVERRIDES_IN_PACKAGE_LOCK_FILE = 'UPDATE_SOCKET_OVERRIDES_IN_PACKAGE_LOCK_FILE';
|
|
30
43
|
constants.ENV = Object.freeze({
|
package/dist/require/link.js
CHANGED
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
function _interop(e) {
|
|
4
|
+
let d
|
|
5
|
+
if (e) {
|
|
6
|
+
let c = 0
|
|
7
|
+
for (const k in e) {
|
|
8
|
+
d = c++ === 0 && k === 'default' ? e[k] : void 0
|
|
9
|
+
if (!d) break
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return d ?? e
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
var require$$0 = _interop(require('node:fs'));
|
|
16
|
+
var require$$1 = _interop(require('node:path'));
|
|
17
|
+
var require$$4 = _interop(require('which'));
|
|
6
18
|
|
|
7
19
|
var link = {};
|
|
8
20
|
|
package/dist/require/npm-cli.js
CHANGED
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
function _interop(e) {
|
|
5
|
+
let d
|
|
6
|
+
if (e) {
|
|
7
|
+
let c = 0
|
|
8
|
+
for (const k in e) {
|
|
9
|
+
d = c++ === 0 && k === 'default' ? e[k] : void 0
|
|
10
|
+
if (!d) break
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return d ?? e
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
var vendor = _interop(require('./vendor.js'));
|
|
17
|
+
var require$$0 = _interop(require('node:fs'));
|
|
18
|
+
var require$$1 = _interop(require('node:path'));
|
|
19
|
+
var require$$1$1 = _interop(require('@npmcli/promise-spawn'));
|
|
20
|
+
var constants = _interop(require('./constants.js'));
|
|
21
|
+
var link = _interop(require('./link.js'));
|
|
22
|
+
var pathResolve = _interop(require('./path-resolve.js'));
|
|
11
23
|
|
|
12
24
|
var npmCli$2 = {};
|
|
13
25
|
|
|
@@ -1,25 +1,37 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var require$$
|
|
18
|
-
var require$$
|
|
19
|
-
var require$$
|
|
20
|
-
var
|
|
21
|
-
var
|
|
22
|
-
var
|
|
3
|
+
function _interop(e) {
|
|
4
|
+
let d
|
|
5
|
+
if (e) {
|
|
6
|
+
let c = 0
|
|
7
|
+
for (const k in e) {
|
|
8
|
+
d = c++ === 0 && k === 'default' ? e[k] : void 0
|
|
9
|
+
if (!d) break
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return d ?? e
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
var vendor = _interop(require('./vendor.js'));
|
|
16
|
+
var constants = _interop(require('./constants.js'));
|
|
17
|
+
var require$$1$4 = _interop(require('node:events'));
|
|
18
|
+
var require$$0 = _interop(require('node:fs'));
|
|
19
|
+
var require$$3$2 = _interop(require('node:https'));
|
|
20
|
+
var require$$1$1 = _interop(require('node:path'));
|
|
21
|
+
var require$$3 = _interop(require('node:readline'));
|
|
22
|
+
var require$$6$2 = _interop(require('node:timers/promises'));
|
|
23
|
+
var require$$1$3 = _interop(require('@inquirer/confirm'));
|
|
24
|
+
var require$$3$1 = _interop(require('@socketregistry/yocto-spinner'));
|
|
25
|
+
var require$$5$1 = _interop(require('npm-package-arg'));
|
|
26
|
+
var require$$4 = _interop(require('semver'));
|
|
27
|
+
var require$$6$1 = _interop(require('@socketsecurity/config'));
|
|
28
|
+
var require$$7 = _interop(require('@socketsecurity/registry/lib/objects'));
|
|
29
|
+
var require$$1$2 = _interop(require('node:net'));
|
|
30
|
+
var require$$1 = _interop(require('node:os'));
|
|
31
|
+
var require$$5 = _interop(require('node:stream'));
|
|
32
|
+
var sdk = _interop(require('./sdk.js'));
|
|
33
|
+
var pathResolve = _interop(require('./path-resolve.js'));
|
|
34
|
+
var link = _interop(require('./link.js'));
|
|
23
35
|
|
|
24
36
|
var npmInjection$2 = {};
|
|
25
37
|
|
|
@@ -30,7 +42,7 @@ var arborist = {};
|
|
|
30
42
|
var ttyServer$1 = {};
|
|
31
43
|
|
|
32
44
|
var name = "socket";
|
|
33
|
-
var version = "0.14.
|
|
45
|
+
var version = "0.14.32";
|
|
34
46
|
var description = "CLI tool for Socket.dev";
|
|
35
47
|
var homepage = "http://github.com/SocketDev/socket-cli";
|
|
36
48
|
var license = "MIT";
|
|
@@ -105,12 +117,14 @@ var scripts = {
|
|
|
105
117
|
var dependencies = {
|
|
106
118
|
"@apideck/better-ajv-errors": "^0.3.6",
|
|
107
119
|
"@cyclonedx/cdxgen": "^11.0.5",
|
|
108
|
-
"@inquirer/
|
|
120
|
+
"@inquirer/confirm": "^5.0.2",
|
|
121
|
+
"@inquirer/password": "^4.0.3",
|
|
122
|
+
"@inquirer/select": "^4.0.3",
|
|
109
123
|
"@npmcli/promise-spawn": "^8.0.2",
|
|
110
124
|
"@socketregistry/hyrious__bun.lockb": "1.0.5",
|
|
111
125
|
"@socketregistry/yocto-spinner": "^1.0.1",
|
|
112
126
|
"@socketsecurity/config": "^2.1.3",
|
|
113
|
-
"@socketsecurity/registry": "^1.0.
|
|
127
|
+
"@socketsecurity/registry": "^1.0.35",
|
|
114
128
|
"@socketsecurity/sdk": "^1.3.0",
|
|
115
129
|
blessed: "^0.1.81",
|
|
116
130
|
"blessed-contrib": "^4.11.0",
|
|
@@ -275,7 +289,7 @@ var _nodeNet = require$$1$2;
|
|
|
275
289
|
var _nodeOs = require$$1;
|
|
276
290
|
var _nodePath$1 = require$$1$1;
|
|
277
291
|
var _nodeReadline$1 = require$$3;
|
|
278
|
-
var _nodeStream
|
|
292
|
+
var _nodeStream = require$$5;
|
|
279
293
|
var _package = require$$6;
|
|
280
294
|
var _misc$1 = sdk.misc;
|
|
281
295
|
const NEWLINE_CHAR_CODE = 10; /*'\n'*/
|
|
@@ -313,10 +327,10 @@ function createNonStandardTTYServer() {
|
|
|
313
327
|
if (remote_ipc_version !== _package.version) {
|
|
314
328
|
throw new Error('Mismatched STDIO tunnel IPC version, ensure you only have 1 version of socket CLI being called.');
|
|
315
329
|
}
|
|
316
|
-
const input = hasInput ? new _nodeStream
|
|
330
|
+
const input = hasInput ? new _nodeStream.PassThrough() : null;
|
|
317
331
|
input?.pause();
|
|
318
332
|
if (input) conn.pipe(input);
|
|
319
|
-
const output = hasOutput ? new _nodeStream
|
|
333
|
+
const output = hasOutput ? new _nodeStream.PassThrough() : null;
|
|
320
334
|
if (output) {
|
|
321
335
|
output.pipe(conn)
|
|
322
336
|
// Make ora happy
|
|
@@ -470,7 +484,7 @@ var issueRules = {};
|
|
|
470
484
|
Object.defineProperty(issueRules, "__esModule", {
|
|
471
485
|
value: true
|
|
472
486
|
});
|
|
473
|
-
issueRules.
|
|
487
|
+
issueRules.createAlertUXLookup = createAlertUXLookup;
|
|
474
488
|
//#region UX Constants
|
|
475
489
|
|
|
476
490
|
const IGNORE_UX = {
|
|
@@ -537,7 +551,7 @@ function resolveIssueRuleUX(entriesOrderedIssueRules, defaultValue) {
|
|
|
537
551
|
function issueRuleValueDoesNotDefer(issueRule) {
|
|
538
552
|
if (issueRule === undefined) {
|
|
539
553
|
return false;
|
|
540
|
-
} else if (typeof issueRule === 'object'
|
|
554
|
+
} else if (issueRule !== null && typeof issueRule === 'object') {
|
|
541
555
|
const {
|
|
542
556
|
action
|
|
543
557
|
} = issueRule;
|
|
@@ -569,11 +583,13 @@ function uxForDefinedNonDeferValue(issueRuleValue) {
|
|
|
569
583
|
|
|
570
584
|
//#region exports
|
|
571
585
|
|
|
572
|
-
function
|
|
586
|
+
function createAlertUXLookup(settings) {
|
|
573
587
|
const cachedUX = new Map();
|
|
574
588
|
return context => {
|
|
575
|
-
const
|
|
576
|
-
|
|
589
|
+
const {
|
|
590
|
+
type
|
|
591
|
+
} = context.alert;
|
|
592
|
+
let ux = cachedUX.get(type);
|
|
577
593
|
if (ux) {
|
|
578
594
|
return ux;
|
|
579
595
|
}
|
|
@@ -586,7 +602,7 @@ function createIssueUXLookup(settings) {
|
|
|
586
602
|
if (!resolvedTarget) {
|
|
587
603
|
break;
|
|
588
604
|
}
|
|
589
|
-
const issueRuleValue = resolvedTarget.issueRules?.[
|
|
605
|
+
const issueRuleValue = resolvedTarget.issueRules?.[type];
|
|
590
606
|
if (typeof issueRuleValue !== 'undefined') {
|
|
591
607
|
orderedIssueRules.push(issueRuleValue);
|
|
592
608
|
}
|
|
@@ -594,7 +610,7 @@ function createIssueUXLookup(settings) {
|
|
|
594
610
|
}
|
|
595
611
|
entriesOrderedIssueRules.push(orderedIssueRules);
|
|
596
612
|
}
|
|
597
|
-
const defaultValue = settings.defaults.issueRules[
|
|
613
|
+
const defaultValue = settings.defaults.issueRules[type];
|
|
598
614
|
let resolvedDefaultValue = {
|
|
599
615
|
action: 'error'
|
|
600
616
|
};
|
|
@@ -608,7 +624,7 @@ function createIssueUXLookup(settings) {
|
|
|
608
624
|
};
|
|
609
625
|
}
|
|
610
626
|
ux = resolveIssueRuleUX(entriesOrderedIssueRules, resolvedDefaultValue);
|
|
611
|
-
cachedUX.set(
|
|
627
|
+
cachedUX.set(type, ux);
|
|
612
628
|
return ux;
|
|
613
629
|
};
|
|
614
630
|
}
|
|
@@ -619,20 +635,19 @@ Object.defineProperty(arborist, "__esModule", {
|
|
|
619
635
|
});
|
|
620
636
|
arborist.SafeArborist = void 0;
|
|
621
637
|
arborist.installSafeArborist = installSafeArborist;
|
|
622
|
-
var _nodeEvents = require$$1$
|
|
638
|
+
var _nodeEvents = require$$1$4;
|
|
623
639
|
var _nodeFs = require$$0;
|
|
624
640
|
var _nodeHttps = require$$3$2;
|
|
625
641
|
var _nodePath = require$$1$1;
|
|
626
642
|
var _nodeReadline = require$$3;
|
|
627
|
-
var
|
|
628
|
-
var
|
|
643
|
+
var _promises = require$$6$2;
|
|
644
|
+
var _confirm = require$$1$3;
|
|
645
|
+
var _yoctoSpinner = require$$3$1;
|
|
629
646
|
var _isInteractive = _interopRequireDefault(vendor.isInteractive);
|
|
630
647
|
var _npmPackageArg = require$$5$1;
|
|
631
|
-
var _yoctoSpinner = require$$3$1;
|
|
632
648
|
var _semver = require$$4;
|
|
633
649
|
var _config = require$$6$1;
|
|
634
650
|
var _objects = require$$7;
|
|
635
|
-
var _packages = require$$8;
|
|
636
651
|
var _ttyServer = ttyServer$1;
|
|
637
652
|
var _constants$1 = constants.constants;
|
|
638
653
|
var _colorOrMarkdown = sdk.colorOrMarkdown;
|
|
@@ -702,7 +717,7 @@ const OverrideSet = require(arboristOverrideSetClassPatch);
|
|
|
702
717
|
const kCtorArgs = Symbol('ctorArgs');
|
|
703
718
|
const kRiskyReify = Symbol('riskyReify');
|
|
704
719
|
const formatter = new _colorOrMarkdown.ColorOrMarkdown(false);
|
|
705
|
-
const pubToken = (0, _sdk.getDefaultKey)() ??
|
|
720
|
+
const pubToken = (0, _sdk.getDefaultKey)() ?? _constants$1.SOCKET_PUBLIC_API_KEY;
|
|
706
721
|
const ttyServer = (0, _ttyServer.createTTYServer)((0, _isInteractive.default)({
|
|
707
722
|
stream: process.stdin
|
|
708
723
|
}), log);
|
|
@@ -717,31 +732,20 @@ async function uxLookup(settings) {
|
|
|
717
732
|
return _uxLookup(settings);
|
|
718
733
|
}
|
|
719
734
|
async function* batchScan(pkgIds) {
|
|
720
|
-
const
|
|
721
|
-
packages: pkgIds.map(id => {
|
|
722
|
-
const {
|
|
723
|
-
name,
|
|
724
|
-
version
|
|
725
|
-
} = pkgidParts(id);
|
|
726
|
-
return {
|
|
727
|
-
eco: 'npm',
|
|
728
|
-
pkg: name,
|
|
729
|
-
ver: version,
|
|
730
|
-
top: true
|
|
731
|
-
};
|
|
732
|
-
})
|
|
733
|
-
};
|
|
734
|
-
// TODO: Migrate to SDK.
|
|
735
|
-
const pkgDataReq = _nodeHttps.request(`${_constants$1.API_V0_URL}/scan/batch`, {
|
|
735
|
+
const req = _nodeHttps.request(`${_constants$1.API_V0_URL}/purl?alerts=true`, {
|
|
736
736
|
method: 'POST',
|
|
737
737
|
headers: {
|
|
738
738
|
Authorization: `Basic ${Buffer.from(`${pubToken}:`).toString('base64url')}`
|
|
739
739
|
},
|
|
740
740
|
signal: abortSignal
|
|
741
|
-
}).end(JSON.stringify(
|
|
741
|
+
}).end(JSON.stringify({
|
|
742
|
+
components: pkgIds.map(id => ({
|
|
743
|
+
purl: `pkg:npm/${id}`
|
|
744
|
+
}))
|
|
745
|
+
}));
|
|
742
746
|
const {
|
|
743
747
|
0: res
|
|
744
|
-
} = await _nodeEvents.once(
|
|
748
|
+
} = await _nodeEvents.once(req, 'response');
|
|
745
749
|
const ok = res.statusCode >= 200 && res.statusCode <= 299;
|
|
746
750
|
if (!ok) {
|
|
747
751
|
throw new Error(`Socket API Error: ${res.statusCode}`);
|
|
@@ -807,118 +811,118 @@ function findSpecificOverrideSet(first, second) {
|
|
|
807
811
|
log.silly('Conflicting override sets', first, second);
|
|
808
812
|
return undefined;
|
|
809
813
|
}
|
|
814
|
+
function isAlertFixable(alert) {
|
|
815
|
+
const {
|
|
816
|
+
type
|
|
817
|
+
} = alert;
|
|
818
|
+
if (type === 'cve' || type === 'mediumCVE' || type === 'mildCVE' || type === 'criticalCVE') {
|
|
819
|
+
return !!alert.props?.['firstPatchedVersionIdentifier'];
|
|
820
|
+
}
|
|
821
|
+
return type === 'socketUpgradeAvailable';
|
|
822
|
+
}
|
|
810
823
|
function maybeReadfileSync(filepath) {
|
|
811
824
|
try {
|
|
812
825
|
return (0, _nodeFs.readFileSync)(filepath, 'utf8');
|
|
813
826
|
} catch {}
|
|
814
827
|
return undefined;
|
|
815
828
|
}
|
|
816
|
-
async function
|
|
829
|
+
async function getPackagesAlerts(safeArb, _registry, pkgs, output) {
|
|
817
830
|
const spinner = _yoctoSpinner({
|
|
818
831
|
stream: output
|
|
819
832
|
});
|
|
820
|
-
let result = false;
|
|
821
833
|
let {
|
|
822
834
|
length: remaining
|
|
823
835
|
} = pkgs;
|
|
836
|
+
const packageAlerts = [];
|
|
824
837
|
if (!remaining) {
|
|
825
838
|
spinner.success('No changes detected');
|
|
826
|
-
return
|
|
839
|
+
return packageAlerts;
|
|
827
840
|
}
|
|
828
841
|
const getText = () => `Looking up data for ${remaining} packages`;
|
|
829
842
|
spinner.start(getText());
|
|
830
843
|
try {
|
|
831
|
-
for await (const
|
|
844
|
+
for await (const artifact of batchScan(pkgs.map(p => p.pkgid))) {
|
|
845
|
+
if (!artifact.name || !artifact.version || !artifact.alerts?.length) {
|
|
846
|
+
continue;
|
|
847
|
+
}
|
|
832
848
|
const {
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
const id = `${name}@${version}`;
|
|
849
|
+
version
|
|
850
|
+
} = artifact;
|
|
851
|
+
const name = `${artifact.namespace ? `${artifact.namespace}/` : ''}${artifact.name}`;
|
|
852
|
+
const id = `${name}@${artifact.version}`;
|
|
853
|
+
let blocked = false;
|
|
837
854
|
let displayWarning = false;
|
|
838
|
-
let
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
855
|
+
let alerts = [];
|
|
856
|
+
for (const alert of artifact.alerts) {
|
|
857
|
+
// eslint-disable-next-line no-await-in-loop
|
|
858
|
+
const ux = await uxLookup({
|
|
859
|
+
package: {
|
|
860
|
+
name,
|
|
861
|
+
version
|
|
862
|
+
},
|
|
863
|
+
alert: {
|
|
864
|
+
type: alert.type
|
|
865
|
+
}
|
|
845
866
|
});
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
}
|
|
867
|
+
if (ux.block) {
|
|
868
|
+
blocked = true;
|
|
869
|
+
}
|
|
870
|
+
if (ux.display) {
|
|
871
|
+
displayWarning = true;
|
|
872
|
+
}
|
|
873
|
+
if (ux.block || ux.display) {
|
|
874
|
+
alerts.push({
|
|
875
|
+
name,
|
|
876
|
+
version,
|
|
877
|
+
type: alert.type,
|
|
878
|
+
block: ux.block,
|
|
879
|
+
raw: alert,
|
|
880
|
+
fixable: isAlertFixable(alert)
|
|
861
881
|
});
|
|
862
|
-
if
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
//
|
|
876
|
-
//
|
|
877
|
-
|
|
878
|
-
if (pkg?.existing) {
|
|
879
|
-
const oldPkgData =
|
|
880
|
-
// eslint-disable-next-line no-await-in-loop
|
|
881
|
-
(await batchScan([pkg.existing]).next()).value;
|
|
882
|
-
if (oldPkgData.type === 'success') {
|
|
883
|
-
failures = failures.filter(issue => oldPkgData.value.issues.find(oldIssue => oldIssue.type === issue.type) === undefined);
|
|
884
|
-
}
|
|
885
|
-
}
|
|
882
|
+
// Before we ask about problematic issues, check to see if they
|
|
883
|
+
// already existed in the old version if they did, be quiet.
|
|
884
|
+
const pkg = pkgs.find(p => p.pkgid === id && p.existing?.startsWith(`${name}@`));
|
|
885
|
+
if (pkg?.existing) {
|
|
886
|
+
// const oldArtifact: SocketArtifact =
|
|
887
|
+
// // eslint-disable-next-line no-await-in-loop
|
|
888
|
+
// (await batchScan([pkg.existing]).next()).value
|
|
889
|
+
// console.log('oldArtifact', oldArtifact)
|
|
890
|
+
// if (oldArtifact.type === 'success') {
|
|
891
|
+
// issues = issues.filter(
|
|
892
|
+
// ({ type }) =>
|
|
893
|
+
// oldPkgData.value.issues.find(
|
|
894
|
+
// oldIssue => oldIssue.type === type
|
|
895
|
+
// ) === undefined
|
|
896
|
+
// )
|
|
897
|
+
// }
|
|
886
898
|
}
|
|
887
899
|
}
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
}
|
|
900
|
+
}
|
|
901
|
+
if (!blocked) {
|
|
902
|
+
const pkg = pkgs.find(p => p.pkgid === id);
|
|
903
|
+
if (pkg) {
|
|
904
|
+
await tarball.stream(id, stream => {
|
|
905
|
+
stream.resume();
|
|
906
|
+
return stream.promise();
|
|
907
|
+
}, {
|
|
908
|
+
...safeArb[kCtorArgs][0]
|
|
909
|
+
});
|
|
898
910
|
}
|
|
899
911
|
}
|
|
900
912
|
if (displayWarning) {
|
|
901
913
|
spinner.stop(`(socket) ${formatter.hyperlink(id, `https://socket.dev/npm/package/${name}/overview/${version}`)} contains risks:`);
|
|
902
|
-
|
|
903
|
-
if ((0, _packages.isBlessedPackageName)(name)) {
|
|
904
|
-
failures = failures.filter(({
|
|
905
|
-
type
|
|
906
|
-
}) => type !== 'unpopularPackage' && type !== 'unstableOwnership');
|
|
907
|
-
}
|
|
908
|
-
failures.sort((a, b) => a.type < b.type ? -1 : 1);
|
|
914
|
+
alerts.sort((a, b) => a.type < b.type ? -1 : 1);
|
|
909
915
|
const lines = new Set();
|
|
910
|
-
for (const
|
|
911
|
-
const {
|
|
912
|
-
type
|
|
913
|
-
} = failure;
|
|
916
|
+
for (const alert of alerts) {
|
|
914
917
|
// Based data from { pageProps: { alertTypes } } of:
|
|
915
918
|
// https://socket.dev/_next/data/94666139314b6437ee4491a0864e72b264547585/en-US.json
|
|
916
|
-
const info = translations.
|
|
917
|
-
const title = info?.title ?? type;
|
|
918
|
-
const
|
|
919
|
+
const info = translations.alerts[alert.type];
|
|
920
|
+
const title = info?.title ?? alert.type;
|
|
921
|
+
const attributes = [...(alert.fixable ? ['fixable'] : []), ...(alert.block ? [] : ['non-blocking'])];
|
|
922
|
+
const maybeAttributes = attributes.length ? ` (${attributes.join('; ')})` : '';
|
|
919
923
|
const maybeDesc = info?.description ? ` - ${info.description}` : '';
|
|
920
924
|
// TODO: emoji seems to mis-align terminals sometimes
|
|
921
|
-
lines.add(` ${title}${
|
|
925
|
+
lines.add(` ${title}${maybeAttributes}${maybeDesc}\n`);
|
|
922
926
|
}
|
|
923
927
|
for (const line of lines) {
|
|
924
928
|
output?.write(line);
|
|
@@ -927,20 +931,14 @@ async function packagesHaveRiskyIssues(safeArb, _registry, pkgs, output) {
|
|
|
927
931
|
}
|
|
928
932
|
remaining -= 1;
|
|
929
933
|
spinner.text = remaining > 0 ? getText() : '';
|
|
934
|
+
packageAlerts.push(...alerts);
|
|
930
935
|
}
|
|
931
|
-
|
|
936
|
+
} catch (e) {
|
|
937
|
+
console.log('error', e);
|
|
932
938
|
} finally {
|
|
933
939
|
spinner.stop();
|
|
934
940
|
}
|
|
935
|
-
|
|
936
|
-
function pkgidParts(pkgid) {
|
|
937
|
-
const delimiter = pkgid.lastIndexOf('@');
|
|
938
|
-
const name = pkgid.slice(0, delimiter);
|
|
939
|
-
const version = pkgid.slice(delimiter + 1);
|
|
940
|
-
return {
|
|
941
|
-
name,
|
|
942
|
-
version
|
|
943
|
-
};
|
|
941
|
+
return packageAlerts;
|
|
944
942
|
}
|
|
945
943
|
function toRepoUrl(resolved) {
|
|
946
944
|
return resolved.replace(/#[\s\S]*$/, '').replace(/\?[\s\S]*$/, '').replace(/\/[^/]*\/-\/[\s\S]*$/, '');
|
|
@@ -1673,36 +1671,19 @@ class SafeArborist extends Arborist {
|
|
|
1673
1671
|
if (!proceed) {
|
|
1674
1672
|
proceed = await ttyServer.captureTTY(async (input, output) => {
|
|
1675
1673
|
if (input && output) {
|
|
1676
|
-
const
|
|
1677
|
-
if (!
|
|
1674
|
+
const alerts = await getPackagesAlerts(this, this['registry'], diff, output);
|
|
1675
|
+
if (!alerts.length) {
|
|
1678
1676
|
return true;
|
|
1679
1677
|
}
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1678
|
+
return await _confirm({
|
|
1679
|
+
message: 'Accept risks of installing these packages?',
|
|
1680
|
+
default: false
|
|
1681
|
+
}, {
|
|
1682
|
+
input,
|
|
1683
|
+
output,
|
|
1684
|
+
signal: abortSignal
|
|
1685
1685
|
});
|
|
1686
|
-
|
|
1687
|
-
try {
|
|
1688
|
-
while (true) {
|
|
1689
|
-
// eslint-disable-next-line no-await-in-loop
|
|
1690
|
-
const answer = await new Promise(resolve => {
|
|
1691
|
-
rli.question('Accept risks of installing these packages (y/N)?\n', {
|
|
1692
|
-
signal: abortSignal
|
|
1693
|
-
}, resolve);
|
|
1694
|
-
});
|
|
1695
|
-
if (/^\s*y(?:es)?\s*$/i.test(answer)) {
|
|
1696
|
-
return true;
|
|
1697
|
-
}
|
|
1698
|
-
if (/^(?:\s*no?\s*|)$/i.test(answer)) {
|
|
1699
|
-
return false;
|
|
1700
|
-
}
|
|
1701
|
-
}
|
|
1702
|
-
} finally {
|
|
1703
|
-
rli.close();
|
|
1704
|
-
}
|
|
1705
|
-
} else if (await packagesHaveRiskyIssues(this, this['registry'], diff, output)) {
|
|
1686
|
+
} else if ((await getPackagesAlerts(this, this['registry'], diff, output)).length > 0) {
|
|
1706
1687
|
throw new Error('Socket npm Unable to prompt to accept risk, need TTY to do so');
|
|
1707
1688
|
}
|
|
1708
1689
|
return true;
|
|
@@ -1803,7 +1784,7 @@ void (async () => {
|
|
|
1803
1784
|
}
|
|
1804
1785
|
});
|
|
1805
1786
|
}
|
|
1806
|
-
_uxLookup = (0, _issueRules.
|
|
1787
|
+
_uxLookup = (0, _issueRules.createAlertUXLookup)(settings);
|
|
1807
1788
|
})();
|
|
1808
1789
|
|
|
1809
1790
|
var _constants = constants.constants;
|
package/dist/require/npx-cli.js
CHANGED
|
@@ -1,11 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
function _interop(e) {
|
|
5
|
+
let d
|
|
6
|
+
if (e) {
|
|
7
|
+
let c = 0
|
|
8
|
+
for (const k in e) {
|
|
9
|
+
d = c++ === 0 && k === 'default' ? e[k] : void 0
|
|
10
|
+
if (!d) break
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return d ?? e
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
var vendor = _interop(require('./vendor.js'));
|
|
17
|
+
var require$$1 = _interop(require('node:path'));
|
|
18
|
+
var require$$1$1 = _interop(require('@npmcli/promise-spawn'));
|
|
19
|
+
var constants = _interop(require('./constants.js'));
|
|
20
|
+
var link = _interop(require('./link.js'));
|
|
9
21
|
|
|
10
22
|
var npxCli$2 = {};
|
|
11
23
|
|