2026-10-13 10:33:31 +02:00
// Finite, isolated administrator workflow proof using actual UI and HTTP routes.
import assert from 'node:assert/strict' ;
import { createRequire } from 'node:module' ;
import { mkdtempSync , mkdirSync , rmSync , writeFileSync } from 'node:fs' ;
import { tmpdir } from 'node:os' ;
import { join , resolve , sep , basename } from 'node:path' ;
import { spawn } from 'node:child_process' ;
import { randomBytes } from 'node:crypto' ;
import { openStore , digest } from '../apps/server/store.mjs' ;
import { createApp } from '../apps/server/app.mjs' ;
import { verifyPolicy } from '../packages/core/policy.mjs' ;
const require = createRequire ( import . meta . url ), directory = mkdtempSync ( join ( tmpdir (), 'safetynet-independent-review-admin-smoke-' ));
let store , server , child ;
try {
store = openStore ( join ( directory , 'management' )); const adminToken = randomBytes ( 32 ). toString ( 'base64url' ), config = { adminToken , publicUrl : 'http://127.0.0.1' , secure : false , requireIndependentPolicyApproval : true };
for ( const [ credential , role , sub ] of [[ 'synthetic-review-author' , 'admin' , 'synthetic-author' ],[ 'synthetic-review-admin' , 'admin' , 'synthetic-reviewer' ],[ 'synthetic-review-operator' , 'operator' , 'synthetic-operator' ]]) store . db . prepare ( 'INSERT INTO sessions VALUES(?,?,?)' ). run ( digest ( credential ), Date . now () + 3600000 , JSON . stringify ({ sub , role }));
store . db . prepare ( 'INSERT INTO devices(id,name,platform,user,token_hash,last_seen) VALUES(?,?,?,?,?,?)' ). run ( 'synthetic-bookmark-device' , 'Synthetic bookmark device' , 'win32' , 'synthetic-user' , 'synthetic-unused' , new Date (). toISOString ());
store . db . prepare ( 'UPDATE devices SET document_analysis_enabled=0 WHERE id=?' ). run ( 'synthetic-bookmark-device' );
server = createApp ( store , config ). listen ( 0 , '127.0.0.1' ); await new Promise ( r => server . once ( 'listening' , r )); config . publicUrl = `http://127.0.0.1: ${ server . address (). port } ` ;
const env = {... process . env , SAFETYNET_ADMIN_SMOKE_PROFILE : join ( directory , 'browser' ), SAFETYNET_ADMIN_SMOKE_URL : config . publicUrl , SAFETYNET_ADMIN_SMOKE_TOKEN : adminToken }; delete env . ELECTRON_RUN_AS_NODE ;
child = spawn ( require ( 'electron' ),[ 'scripts/independent-review-admin-smoke.cjs' ],{ env , windowsHide : true , stdio : [ 'ignore' , 'pipe' , 'pipe' ]}); child . stdout . on ( 'data' , data =>{ if ( String ( data ). includes ( 'INDEPENDENT_ADMIN_PROOF_OK' )) console . log ( 'Independent policy approval administrator interface workflow passed.' );}); child . stderr . on ( 'data' , data =>{ const text = String ( data ); if ( text . includes ( 'INDEPENDENT_ADMIN_PROOF_' )) console . error ( text . trim ());});
const timer = setTimeout (()=> child . kill (), 60000 ), code = await new Promise ( r =>{ child . once ( 'exit' , code => r ( code ?? 1 )); child . once ( 'error' ,()=> r ( 1 ));}); clearTimeout ( timer ); assert . equal ( code , 0 , 'Independent policy approval administrator interface proof failed' );
const policy = verifyPolicy ( store . envelope (), store . publicKey ()); assert . equal ( policy . version , 3 ); assert . equal ( store . db . prepare ( 'SELECT document_analysis_enabled FROM devices WHERE id=?' ). get ( 'synthetic-bookmark-device' ). document_analysis_enabled , 1 ); assert . equal ( policy . brand . name , 'Independently approved' );
const report = { actualAdministratorUi : true , mandatoryIndependentApproval : true , payloadDiff : true , selfApprovalHttpDenied : true , distinctReviewer : true , operatorPrepareOnly : true , inspectionOperationVisible : true , inspectionUnchangedUntilApproval : true , rejectedAndStaleVisible : true , publishedOnlyAfterApproval : true , nodeUnavailable : true }; mkdirSync ( 'artifacts' ,{ recursive : true }); writeFileSync ( 'artifacts/independent-review-admin-proof.json' , JSON . stringify ( report , null , 2 )); console . log ( JSON . stringify ( report ));
} finally {
2026-10-13 23:19:22 +02:00
// eslint-disable-next-line no-unsafe-finally -- Cleanup failure must fail closed rather than report successful protected cleanup.
2026-10-13 10:33:31 +02:00
child ? . kill (); if ( server ) await new Promise ( r =>{ server . closeAllConnections ? .(); server . close ( r );}); store ? . db . close (); const target = resolve ( directory ); if ( ! target . startsWith ( resolve ( tmpdir ()) + sep ) ||! basename ( target ). startsWith ( 'safetynet-independent-review-admin-smoke-' )) throw Error ( 'Unsafe proof cleanup' ); rmSync ( target ,{ recursive : true , force : true , maxRetries : 10 , retryDelay : 100 });
}