@dancing-ninjas/project-euler-helper-kit
Version:
Dancing Ninjas Project Euler helpers + constrained telemetry strategies compatible with npmjs.org-only egress.
29 lines (23 loc) • 935 B
JavaScript
import fs from 'fs';
import readline from 'readline';
const input = process.argv[2];
const out = process.argv[3] || 'telemetry/events.ndjson';
const pkg = process.argv[4];
if (!input || !pkg) {
console.error('Usage: node scripts/npmjs-proxy-logs-to-events.mjs <infile> <outfile> <package>');
process.exit(1);
}
const rl = readline.createInterface({ input: fs.createReadStream(input, { encoding: 'utf8' }) });
const outStream = fs.createWriteStream(out, { flags: 'a' });
function parse(line) {
const req = line.match(/"GET ([^ ]+) HTTP/);
if (!req) return null;
const path = req[1];
if (!path.includes(pkg.split('/').pop()) || !path.endsWith('.tgz')) return null;
const t = line.match(/\[(.*?)\]/);
return { at: new Date().toISOString(), path };
}
rl.on('line', line => {
const ev = parse(line);
if (ev) outStream.write(JSON.stringify({ kind: 'download', at: ev.at, pkg, http: { path: ev.path } }) + '\n');
});