Files
ycode/scripts/rea/cpp-expert-export.mjs
T

14 lines
1.4 KiB
JavaScript

/** Original access goes exclusively through formal public REA directory CLI. */
import fs from 'node:fs'
import {spawnSync} from 'node:child_process'
import crypto from 'node:crypto'
const saved=JSON.parse(fs.readFileSync(process.argv[2],'utf8')),analysis=saved.normalized_result?saved:saved.details.partial_observation
const inventory=process.argv[3]==='--inventory'
const r=spawnSync(process.execPath,['.tmp/rea-css-runtime/scripts/rea.mjs',...(inventory?['inspect-selected-directory-text-root',analysis.normalized_result.input_path]:['export-selected-directory-text',analysis.normalized_result.input_path,analysis.normalized_result.root_artifact_sha256,JSON.stringify(process.argv.slice(3))])],{encoding:'utf8',maxBuffer:32*1024*1024})
if(r.status!==0)throw Error(r.stderr||r.stdout)
const evidence=JSON.parse(r.stdout)
if(evidence.normalized_result.root_sha256!==analysis.normalized_result.root_artifact_sha256)throw Error('Inventory root pin mismatch')
for(const f of evidence.normalized_result.files??[])if(crypto.createHash('sha256').update(f.text).digest('hex')!==f.sha256)throw Error('Export SHA mismatch')
const output=`.tmp/rea-cpp-${inventory?'inventory':'text'}-${evidence.evidence_id}.json`;fs.writeFileSync(output,JSON.stringify(evidence))
console.log(JSON.stringify({output,evidenceId:evidence.evidence_id,root:evidence.normalized_result.root_sha256,files:inventory?evidence.normalized_result.members:evidence.normalized_result.files.map(({text,...m})=>m)},null,2))