const assert=require('node:assert/strict'); const vm=require('node:vm'); const fs=require('node:fs'); const probes=JSON.parse(fs.readFileSync(process.argv[2],'utf8')); const me={toString:()=> 'self@lid'}; const other={toString:()=> 'other@lid'}; let sends=0; const data={id:{remote:me,toString:()=> 'self-message'},body:'fixture'}; const chat={id:me,msgs:{get:()=>({ack:3})}}; const modules={ WAWebUserPrefsMeUser:{getMaybeMeLidUser:()=>me,isMeAccount:v=>v===me}, WAWebFindChatAction:{findOrCreateLatestChat:async()=>({chat})}, WAWebSendTextMsgChatAction:{createTextMsgData:async()=>data,addAndSendTextMsg:async()=>{sends++;}}, WAWebSchemaMessage:{getMessageTable:()=>({get:async()=>({body:'fixture',t:123})})}, WAWebDBMessageSerialization:{messageFromDbRow:v=>v}, WAWebSchemaContact_DO_NOT_USE_DIRECTLY:{getContactTable:()=>({all:async()=>[ {id:'a@lid',name:'Grüße 😺',phoneNumber:'123',unexpectedSecret:{value:'never export'}}, {id:'b@lid',name:null,isBusiness:true}, ]})}, }; const run=code=>vm.runInNewContext(code,{require:name=>modules[name]}); (async()=>{ const good=await run(probes.send); assert.equal(sends,1);assert.equal(good.persisted,true);assert.equal(good.plaintext_matches,true); chat.id=other; await assert.rejects(run(probes.send),/Refusing to send outside own account/); assert.equal(sends,1); chat.id=me;data.id.remote=other; await assert.rejects(run(probes.send),/not addressed to self/); assert.equal(sends,1); const contacts=await run(probes.contacts); assert.equal(contacts.count,2);assert.equal(contacts.contacts[0].name,'Grüße 😺'); assert.equal('unexpectedSecret' in contacts.contacts[0],false); assert.equal(contacts.cdp,false);assert.equal(contacts.ui_automation,false); console.log('PASS: send once, own-chat guard, own-recipient guard, plaintext readback, contact fields'); })().catch(error=>{console.error(error);process.exitCode=1;});