Assessor_2.0/scripts/update-reference-assets.mts

16 lines
1.1 KiB
TypeScript

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 <Enterprise STIX> <D3FEND JSON-LD>');
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`);
}