// Finite native fixture: synthetic teaching data, real signed policy and CPU model. const {app,BrowserWindow,clipboard,ClipboardItem}=require('electron'); const assert=require('node:assert/strict'); app.setPath('userData',process.env.SAFETYNET_SEMANTIC_PROFILE); app.setPath('sessionData',process.env.SAFETYNET_SEMANTIC_PROFILE); app.disableHardwareAcceleration(); require('../apps/browser/main.cjs'); const wait=ms=>new Promise(resolve=>setTimeout(resolve,ms)); const deadline=setTimeout(()=>app.exit(1),90000); app.whenReady().then(async()=>{let original;try{ let win; for(let i=0;i<150;i++){win=BrowserWindow.getAllWindows()[0];if(win&&!win.webContents.isLoading()&&win.webContents.getURL().endsWith('index.html'))break;await wait(100);} assert.ok(win,'Trusted shell unavailable'); const enrolled=await win.webContents.executeJavaScript(`window.safetynet.enroll(${JSON.stringify({server:process.env.SAFETYNET_SEMANTIC_SERVER,code:process.env.SAFETYNET_SEMANTIC_CODE})})`); assert.equal(enrolled.ok,true,'Enrollment failed');assert.equal(enrolled.data.ready,true); const page=win.contentView.children.find(child=>child.webContents!==win.webContents).webContents; for(let i=0;i<100&&page.isLoading();i++)await wait(100); const connection=JSON.parse(process.env.SAFETYNET_SEMANTIC_FIXTURES); original=[];for(const item of await clipboard.read()){const data={};for(const type of item.types)data[type]=await item.getType(type);if(Object.keys(data).length)original.push(new ClipboardItem(data));} async function select(text){await page.executeJavaScript(`(()=>{let node=document.getElementById('source');node.textContent=${JSON.stringify(text)};const range=document.createRange();range.selectNodeContents(node);const selection=getSelection();selection.removeAllRanges();selection.addRange(range);})()`);} async function copy(){win.show();win.focus();page.focus();page.sendInputEvent({type:'keyDown',keyCode:'C',modifiers:['control']});page.sendInputEvent({type:'keyUp',keyCode:'C',modifiers:['control']});await wait(500);for(let i=0;i<150;i++){const state=await win.webContents.executeJavaScript('window.safetynet.state()');if(!state.data.clipboardPending)return;await wait(100);}throw Error('Native clipboard scan timed out');} const sentinel='Public semantic test clipboard marker'; await clipboard.writeText(sentinel);await select(connection.paraphrase);await copy(); assert.ok((await clipboard.readText())===sentinel,'Semantic confidential paraphrase reached OS clipboard'); const overview=await (await fetch(`${process.env.SAFETYNET_SEMANTIC_SERVER}/api/admin/overview`,{headers:{authorization:`Bearer ${process.env.SAFETYNET_SEMANTIC_ADMIN}`}})).json(); assert.ok(overview.events.some(event=>event.kind==='clipboard.block'&&event.metadata.ruleId==='synthetic-restructuring'),'Semantic rule did not cause centrally audited block'); await select(connection.publicText);await copy(); for(let i=0;i<30&&await clipboard.readText()!==connection.publicText;i++)await wait(100); assert.equal(await clipboard.readText(),connection.publicText,'Public text was not copied through real local semantic inference'); assert.equal(JSON.stringify(overview.events).includes(connection.paraphrase),false,'Audit contains raw clipboard text'); console.log(JSON.stringify({nativeSemanticClipboard:true,confidentialParaphraseBlocked:true,publicTextAllowed:true,centralAuditMetadataOnly:true})); if(original.length)await clipboard.write(original);else await clipboard.clear();original=null;clearTimeout(deadline);app.quit(); }catch(error){console.error(JSON.stringify({nativeSemanticClipboard:false,error:error.message}));if(original){try{if(original.length)await clipboard.write(original);else await clipboard.clear();}catch{}}clearTimeout(deadline);app.exit(1);}});