@@ -62,27 +62,27 @@ const {
62
62
const formatter = new ColorOrMarkdown ( false )
63
63
64
64
function findBestPatchVersion (
65
- name : string ,
65
+ node : SafeNode ,
66
66
availableVersions : string [ ] ,
67
- currentMajorVersion : number ,
68
67
vulnerableVersionRange ?: string ,
69
68
_firstPatchedVersionIdentifier ?: string
70
69
) : string | null {
71
- const manifestData = getManifestData ( NPM , name )
72
- // Filter versions that are within the current major version and are not in the vulnerable range
73
- const eligibleVersions =
74
- manifestData && manifestData . name === manifestData . package
75
- ? availableVersions
76
- : availableVersions . filter (
77
- version =>
78
- semver . major ( version ) === currentMajorVersion &&
79
- ( ! vulnerableVersionRange ||
80
- ! semver . satisfies ( version , vulnerableVersionRange ) )
81
- )
82
- if ( eligibleVersions . length === 0 ) {
83
- return null
70
+ const manifestData = getManifestData ( NPM , node . name )
71
+ let eligibleVersions
72
+ if ( manifestData && manifestData . name === manifestData . package ) {
73
+ const major = semver . major ( manifestData . version )
74
+ eligibleVersions = availableVersions . filter ( v => semver . major ( v ) === major )
75
+ } else {
76
+ const major = semver . major ( node . version )
77
+ eligibleVersions = availableVersions . filter (
78
+ v =>
79
+ // Filter for versions that are within the current major version
80
+ // and are not in the vulnerable range
81
+ semver . major ( v ) === major &&
82
+ ( ! vulnerableVersionRange ||
83
+ ! semver . satisfies ( v , vulnerableVersionRange ) )
84
+ )
84
85
}
85
- // Use semver to find the max satisfying version.
86
86
return semver . maxSatisfying ( eligibleVersions , '*' )
87
87
}
88
88
@@ -114,15 +114,15 @@ type GetPackageAlertsOptions = {
114
114
}
115
115
116
116
async function getPackagesAlerts (
117
- details : PackageDetail [ ] ,
117
+ arb : SafeArborist ,
118
118
options ?: GetPackageAlertsOptions
119
119
) : Promise < SocketPackageAlert [ ] > {
120
- let { length : remaining } = details
121
120
const IPC = await getIPC ( )
122
121
const runningFixCmd = ! ! IPC [ SOCKET_CLI_IN_FIX_CMD ]
123
122
const needInfoOn = getPackagesToQueryFromDiff ( arb . diff , {
124
123
includeUnchanged : runningFixCmd
125
124
} )
125
+ let { length : remaining } = needInfoOn
126
126
const packageAlerts : SocketPackageAlert [ ] = [ ]
127
127
if ( ! remaining ) {
128
128
return packageAlerts
@@ -142,14 +142,13 @@ async function getPackagesAlerts(
142
142
spinner ?. start ( getText ( ) )
143
143
try {
144
144
for await ( const artifact of batchScan (
145
- arrayUnique ( details . map ( d => d . node . pkgid ) )
145
+ arrayUnique ( needInfoOn . map ( d => d . node . pkgid ) )
146
146
) ) {
147
147
if ( ! artifact . name || ! artifact . version || ! artifact . alerts ?. length ) {
148
148
continue
149
149
}
150
- const { version } = artifact
151
150
const name = resolvePackageName ( < any > artifact )
152
- const id = ` ${ name } @ ${ artifact . version } `
151
+ const { version } = artifact
153
152
154
153
let displayWarning = false
155
154
let alerts : SocketPackageAlert [ ] = [ ]
@@ -178,16 +177,17 @@ async function getPackagesAlerts(
178
177
if ( includeExisting && ! runningFixCmd ) {
179
178
// Before we ask about problematic issues, check to see if they
180
179
// already existed in the old version if they did, be quiet.
181
- const existing = details . find ( d =>
180
+ const existing = needInfoOn . find ( d =>
182
181
d . existing ?. pkgid . startsWith ( `${ name } @` )
183
182
) ?. existing
184
183
if ( existing ) {
185
184
const oldArtifact : SocketArtifact | undefined =
186
185
// eslint-disable-next-line no-await-in-loop
187
186
( await batchScan ( [ existing . pkgid ] ) . next ( ) ) . value
188
- if ( oldArtifact ?. alerts ?. length ) {
187
+ const oldAlerts = oldArtifact ?. alerts
188
+ if ( oldAlerts ?. length ) {
189
189
alerts = alerts . filter (
190
- ( { type } ) => ! oldArtifact . alerts ! . find ( a => a . type === type )
190
+ ( { type } ) => ! oldAlerts . find ( a => a . type === type )
191
191
)
192
192
}
193
193
}
@@ -196,7 +196,10 @@ async function getPackagesAlerts(
196
196
}
197
197
if ( displayWarning && spinner ) {
198
198
spinner . stop (
199
- `(socket) ${ formatter . hyperlink ( id , getSocketDevPackageOverviewUrl ( NPM , name , version ) ) } contains risks:`
199
+ `(socket) ${ formatter . hyperlink (
200
+ `${ name } @${ version } ` ,
201
+ getSocketDevPackageOverviewUrl ( NPM , name , version )
202
+ ) } contains risks:`
200
203
)
201
204
}
202
205
alerts . sort ( ( a , b ) => ( a . type < b . type ? - 1 : 1 ) )
@@ -249,7 +252,7 @@ function getTranslations() {
249
252
return _translations !
250
253
}
251
254
252
- async function updateAdvisoryDependencies (
255
+ async function updateAdvisoryNodes (
253
256
arb : SafeArborist ,
254
257
alerts : SocketPackageAlert [ ]
255
258
) {
@@ -311,11 +314,10 @@ async function updateAdvisoryDependencies(
311
314
}
312
315
}
313
316
314
- async function updateSocketRegistryDependencies ( arb : SafeArborist ) {
317
+ async function updateSocketRegistryNodes ( arb : SafeArborist ) {
315
318
await arb . buildIdealTree ( )
316
- const manifest = getManifestData ( NPM )
317
319
const tree = arb . idealTree !
318
- for ( const { 1 : data } of manifest ) {
320
+ for ( const { 1 : data } of getManifestData ( NPM ) ) {
319
321
const nodes = findPackageNodes ( tree , data . name )
320
322
const packument = nodes . length
321
323
? // eslint-disable-next-line no-await-in-loop
@@ -335,14 +337,11 @@ function updateNode(
335
337
vulnerableVersionRange ?: string ,
336
338
firstPatchedVersionIdentifier ?: string
337
339
) {
338
- const { version } = node
339
- const majorVerNum = semver . major ( version )
340
340
const availableVersions = Object . keys ( packument . versions )
341
341
// Find the highest non-vulnerable version within the same major range
342
342
const targetVersion = findBestPatchVersion (
343
- node . name ,
343
+ node ,
344
344
availableVersions ,
345
- majorVerNum ,
346
345
vulnerableVersionRange ,
347
346
firstPatchedVersionIdentifier
348
347
)
@@ -433,33 +432,31 @@ export async function reify(
433
432
) {
434
433
throw new Error ( 'Socket npm exiting due to risks' )
435
434
}
436
- if ( ! alerts . length || ! runningFixCommand ) {
437
- return await this [ kRiskyReify ] ( ...args )
438
- }
439
- const prev = new Set ( alerts . map ( a => a . key ) )
440
- let ret : SafeNode | undefined
441
- /* eslint-disable no-await-in-loop */
442
- while ( alerts . length > 0 ) {
443
- await updateAdvisoryDependencies ( this , alerts )
444
- ret = await this [ kRiskyReify ] ( ...args )
445
- await this . loadActual ( )
446
- await this . buildIdealTree ( )
447
- needInfoOn = getPackagesToQueryFromDiff ( this . diff , {
448
- includeUnchanged : true
449
- } )
450
- alerts = (
451
- await getPackagesAlerts ( needInfoOn , {
452
- includeExisting : true ,
453
- includeUnfixable : true
454
- } )
455
- ) . filter ( ( { key } ) => {
456
- const unseen = ! prev . has ( key )
457
- if ( unseen ) {
458
- prev . add ( key )
459
- }
460
- return unseen
461
- } )
462
- }
463
- /* eslint-enable no-await-in-loop */
464
- return ret !
435
+ return await this [ kRiskyReify ] ( ...args )
436
+ // const prev = new Set(alerts.map(a => a.key))
437
+ // let ret: SafeNode | undefined
438
+ // /* eslint-disable no-await-in-loop */
439
+ // while (alerts.length > 0) {
440
+ // await updateAdvisoryNodes(this, alerts)
441
+ // ret = await this[kRiskyReify](...args)
442
+ // await this.loadActual()
443
+ // await this.buildIdealTree()
444
+ // needInfoOn = getPackagesToQueryFromDiff(this.diff, {
445
+ // includeUnchanged: true
446
+ // })
447
+ // alerts = (
448
+ // await getPackagesAlerts(needInfoOn, {
449
+ // includeExisting: true,
450
+ // includeUnfixable: true
451
+ // })
452
+ // ).filter(({ key }) => {
453
+ // const unseen = !prev.has(key)
454
+ // if (unseen) {
455
+ // prev.add(key)
456
+ // }
457
+ // return unseen
458
+ // })
459
+ // }
460
+ // /* eslint-enable no-await-in-loop */
461
+ // return ret!
465
462
}
0 commit comments