'use strict'; const {app,BrowserWindow,session}=require('electron'),fs=require('node:fs'),path=require('node:path'),assert=require('node:assert/strict'),{X509Certificate}=require('node:crypto');app.setPath('userData',process.env.SAFETYNET_SMOKE_USERDATA);app.disableHardwareAcceleration();let diagnostics;const moduleDiagnostics=require('../apps/browser/diagnostics.cjs'),create=moduleDiagnostics.createDiagnostics;moduleDiagnostics.createDiagnostics=(...args)=>{const value=create(...args);diagnostics=value;return value;};require('../apps/browser/main.cjs');const delay=ms=>new Promise(r=>setTimeout(r,ms));async function until(fn){for(let i=0;i<300;i++){const v=await fn();if(v)return v;await delay(100);}throw Error('Public diagnostics timeout');} app.whenReady().then(async()=>{let page;try{const win=await until(()=>{const w=BrowserWindow.getAllWindows()[0];return w&&!w.webContents.isLoading()&&w.webContents.getURL().endsWith('index.html')&&w;}),base=process.env.SAFETYNET_SMOKE_SERVER,origin=process.env.SAFETYNET_SMOKE_ORIGIN,fingerprint=new X509Certificate(fs.readFileSync(path.join(__dirname,'../tests/fixtures/icap/cert.pem'))).fingerprint256;session.fromPartition('persist:safetynet-managed').setCertificateVerifyProc((req,cb)=>{let allowed=false;try{allowed=req.hostname==='127.0.0.1'&&new X509Certificate(req.certificate.data).fingerprint256===fingerprint;}catch{}cb(allowed?0:-2);});const ui=async(method,value)=>{const r=await win.webContents.executeJavaScript(`window.safetynet.${method}(${value===undefined?'':JSON.stringify(value)})`);assert.equal(r.ok,true);return r.data;},headers={authorization:'Bearer '+process.env.SAFETYNET_SMOKE_ADMIN,'content-type':'application/json'};await ui('enroll',{server:base,code:process.env.SAFETYNET_SMOKE_CODE});page=win.contentView.children.find(v=>v.webContents!==win.webContents).webContents;await until(()=>!page.isLoading()&&page.getURL()===origin+'/public');const snapshots=[]; for(let i=0;i<4;i++){assert.equal(await page.executeJavaScript("fetch('/public-post',{method:'POST',body:'Public diagnostic-only activity'}).then(r=>r.ok)"),true);snapshots.push({phase:'before-publication',index:i,status:diagnostics.status()});const p=(await(await fetch(base+'/api/admin/overview',{headers})).json()).policy;p.version++;p.brand.color=i%2?'#137c66':'#245fbc';const response=await fetch(base+'/api/admin/policy',{method:'PUT',headers,body:JSON.stringify(p)});assert.equal(response.status,202);const review=await response.json(),approved=await fetch(base+`/api/admin/policy-reviews/${review.reviewId}/approve`,{method:'POST',headers:{cookie:'sn_session='+process.env.SAFETYNET_SMOKE_REVIEWER,origin:base,'content-type':'application/json'},body:JSON.stringify({payloadHash:review.payloadHash,expectedVersion:review.expectedVersion,approve:true})});assert.equal(approved.status,200);await until(async()=>{const state=await ui('state');return state.ready&&state.policyVersion===p.version;});await until(()=>!page.isLoading());await delay(300);snapshots.push({phase:'after-publication',index:i,status:diagnostics.status()});} await diagnostics.flush();await delay(1000);const status=diagnostics.status(),overview=await(await fetch(base+'/api/admin/overview',{headers})).json(),event=overview.events.find(e=>e.kind==='upload.authorized'&&e.metadata.traceId);assert.ok(event);const trace=await(await fetch('http://127.0.0.1:4318/api/trace/'+event.metadata.traceId)).json();assert.ok(trace.spans.some(s=>s.name==='browser.request'));const health=await(await fetch('http://127.0.0.1:4318/health')).json();assert.equal(health.rejectedWrites,0);fs.writeFileSync('artifacts/native-diagnostics-public-proof.json',JSON.stringify({freshProfile:true,publicOnly:true,protectedOperationsNotRepeated:true,reviewedPolicyPublications:4,snapshots,status,traceId:event.metadata.traceId,stages:trace.spans.map(({name,operation,spanId,parentSpanId,durationMs})=>({name,operation,spanId,parentSpanId,durationMs})),health:{storedBytes:health.storedBytes,rejectedWrites:health.rejectedWrites},zeroLifetimeFailures:status.lifetimeFailedExports===0},null,2));console.log('Fresh public native diagnostic measurement completed');require('../apps/browser/page-clipboard-guard.cjs').disposePageClipboardGuard(page);app.exit(status.lifetimeFailedExports===0?0:2); }catch(error){fs.writeFileSync('artifacts/native-diagnostics-public-error.json',JSON.stringify({name:error.name,status:diagnostics?.status()},null,2));if(page&&!page.isDestroyed())require('../apps/browser/page-clipboard-guard.cjs').disposePageClipboardGuard(page);app.exit(1);}});