18 lines
991 B
JavaScript
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};
|