|
1 | 1 | const { danger, allGood, bold, vulnerableWarning, separator } = require('./ascii')
|
2 |
| -const { request, stream, setGlobalDispatcher, Agent } = require('undici') |
3 |
| -const EE = require('events') |
| 2 | +const { request } = require('https') |
4 | 3 | const fs = require('fs')
|
5 | 4 | const path = require('path')
|
6 | 5 | const satisfies = require('semver/functions/satisfies')
|
7 | 6 | const nv = require('@pkgjs/nv')
|
8 | 7 |
|
9 |
| -setGlobalDispatcher(new Agent({ connections: 20 })) |
10 |
| - |
11 | 8 | const CORE_RAW_URL = 'https://raw.githubusercontent.com/nodejs/security-wg/main/vuln/core/index.json'
|
12 | 9 |
|
13 | 10 | let lastETagValue
|
@@ -38,28 +35,57 @@ function updateLastETag (etag) {
|
38 | 35 | }
|
39 | 36 |
|
40 | 37 | async function fetchCoreIndex () {
|
41 |
| - const abortRequest = new EE() |
42 |
| - await stream(CORE_RAW_URL, { signal: abortRequest }, ({ statusCode }) => { |
43 |
| - if (statusCode !== 200) { |
44 |
| - console.error('Request to Github failed. Aborting...') |
45 |
| - abortRequest.emit('abort') |
| 38 | + await new Promise((resolve) => { |
| 39 | + request(CORE_RAW_URL, (res) => { |
| 40 | + if (res.statusCode !== 200) { |
| 41 | + console.error(`Request to Github returned http status ${res.statusCode}. Aborting...`) |
| 42 | + process.nextTick(() => { process.exit(1) }) |
| 43 | + } |
| 44 | + |
| 45 | + const fileStream = fs.createWriteStream(coreLocalFile) |
| 46 | + res.pipe(fileStream) |
| 47 | + |
| 48 | + fileStream.on('finish', () => { |
| 49 | + fileStream.close() |
| 50 | + resolve() |
| 51 | + }) |
| 52 | + |
| 53 | + fileStream.on('error', (err) => { |
| 54 | + console.error(`Error ${err.message} while writing to '${coreLocalFile}'. Aborting...`) |
| 55 | + process.nextTick(() => { process.exit(1) }) |
| 56 | + }) |
| 57 | + }).on('error', (err) => { |
| 58 | + console.error(`Request to Github returned error ${err.message}. Aborting...`) |
46 | 59 | process.nextTick(() => { process.exit(1) })
|
47 |
| - } |
48 |
| - return fs.createWriteStream(coreLocalFile, { flags: 'w', autoClose: true }) |
| 60 | + }).end() |
49 | 61 | })
|
50 | 62 | return readLocal(coreLocalFile)
|
51 | 63 | }
|
52 | 64 |
|
53 | 65 | async function getCoreIndex () {
|
54 |
| - const { headers } = await request(CORE_RAW_URL, { method: 'HEAD' }) |
55 |
| - if (!lastETagValue || lastETagValue !== headers.etag || !fs.existsSync(coreLocalFile)) { |
56 |
| - updateLastETag(headers.etag) |
57 |
| - debug('Creating local core.json') |
58 |
| - return fetchCoreIndex() |
59 |
| - } else { |
60 |
| - debug(`No updates from upstream. Getting a cached version: ${coreLocalFile}`) |
61 |
| - return readLocal(coreLocalFile) |
62 |
| - } |
| 66 | + return new Promise((resolve) => { |
| 67 | + request(CORE_RAW_URL, { method: 'HEAD' }, (res) => { |
| 68 | + if (res.statusCode !== 200) { |
| 69 | + console.error(`Request to Github returned http status ${res.statusCode}. Aborting...`) |
| 70 | + process.nextTick(() => { process.exit(1) }) |
| 71 | + } |
| 72 | + |
| 73 | + res.on('data', () => {}) |
| 74 | + |
| 75 | + const { etag } = res.headers |
| 76 | + if (!lastETagValue || lastETagValue !== etag || !fs.existsSync(coreLocalFile)) { |
| 77 | + updateLastETag(etag) |
| 78 | + debug('Creating local core.json') |
| 79 | + resolve(fetchCoreIndex()) |
| 80 | + } else { |
| 81 | + debug(`No updates from upstream. Getting a cached version: ${coreLocalFile}`) |
| 82 | + resolve(readLocal(coreLocalFile)) |
| 83 | + } |
| 84 | + }).on('error', (err) => { |
| 85 | + console.error(`Request to Github returned error ${err.message}. Aborting...`) |
| 86 | + process.nextTick(() => { process.exit(1) }) |
| 87 | + }).end() |
| 88 | + }) |
63 | 89 | }
|
64 | 90 |
|
65 | 91 | const checkPlatform = platform => {
|
|
0 commit comments