|
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