Files
safetynet/tests/fixtures/broker-durable-audit.cjs

18 lines
991 B
JavaScript

'use strict';
// Test-only, actual fsync of synthetic metadata. Production uses the protected
// encrypted audit store; this fixture never stores request contents or tokens.
const fs=require('node:fs');
const path=require('node:path');
const {randomUUID}=require('node:crypto');
const {BrokerAuditEventSchema}=require('../../apps/network-broker/audit-gate.cjs');
function createSyntheticAudit(test){
const root=path.resolve(__dirname,'../../artifacts/broker-audit-fixtures');fs.mkdirSync(root,{recursive:true});
const filename=path.join(root,`${randomUUID()}.jsonl`),fd=fs.openSync(filename,'wx');
test.after(()=>fs.closeSync(fd));
return Object.freeze({
persist:event=>{BrokerAuditEventSchema.parse(event);fs.writeFileSync(fd,JSON.stringify(event)+'\n');fs.fsyncSync(fd);return {persisted:true,eventId:event.eventId};},
events:()=>fs.readFileSync(filename,'utf8').trim().split('\n').filter(Boolean).map(line=>JSON.parse(line))
});
}
module.exports={createSyntheticAudit};