16 lines
1.1 KiB
TypeScript
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`);
|
|
}
|