import { readFile, writeFile } from 'node:fs/promises'; import { createHash } from 'node:crypto'; import { attackReferenceCatalog, d3fendReferenceCatalog } from '../src/references/catalog-converters.ts'; const [attackPath, d3fendPath] = process.argv.slice(2); if (!attackPath || !d3fendPath) throw new Error('Usage: node --experimental-strip-types scripts/update-reference-assets.mts '); for (const [path, convert, sourceUrl, name] of [ [attackPath, attackReferenceCatalog, 'https://raw.githubusercontent.com/mitre-attack/attack-stix-data/master/enterprise-attack/enterprise-attack-19.2.json', 'attack-reference'], [d3fendPath, d3fendReferenceCatalog, 'https://d3fend.mitre.org/ontologies/d3fend/1.6.0/d3fend.json', 'd3fend-reference'] ] as const) { const bytes = await readFile(path); const catalog = convert(JSON.parse(bytes.toString('utf8')), sourceUrl, createHash('sha256').update(bytes).digest('hex')); const output = `src/assets/data/${name}-v${catalog.version}.json`; await writeFile(output, JSON.stringify(catalog) + '\n'); console.log(`${output}: ${catalog.entries.length} entries`); }