Files
2026-08-16 20:50:31 +02:00

32 lines
2.2 KiB
JavaScript

const B="http://localhost:3000";
const api=async(a,u,n,x={})=>{const r=await fetch(B+"/api",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:a,uid:u,name:n,...x})});const d=await r.json();if(!r.ok)throw new Error(a+": "+d.error);return d};
(async()=>{
const c1=await api("create",null,"Ana",{roomName:"Flow",addBot:false});
const c2=await api("join",null,"Bil",{roomId:c1.room});
console.log("create OK:",c1.room,"players:",c1.snap.players.map(p=>p.name).join(","));
// wrong turn should be rejected
try{await api("roll",c2.uid,"Bil");console.log("ERR: roll allowed out of turn!");}catch(e){console.log("turn guard OK:",e.message)}
const st=await api("start",c1.uid,"Ana");
console.log("start OK. phase:",(await api("rejoin",c1.uid,"Ana",{roomId:c1.room})).snap.phase);
// Ana = starter. roll->peek->declare low (honest)
const r1=await api("roll",c1.uid,"Ana");
const r2=await api("peek",c1.uid,"Ana",{revealed:true});
const st2=(await api("rejoin",c1.uid,"Ana",{roomId:c1.room})).snap;
console.log("Ana dice (private):",JSON.stringify(st2.myDice),"turn:",st2.turnName);
const d1=st2.myDice[0],d2=st2.myDice[1];
// rank mirror
const C=[[1,2],[1,3],[6,6],[5,5],[4,4],[3,3],[2,2],[1,1],[6,5],[6,4]],D=[[6,3],[6,2],[5,4],[5,3],[5,2],[4,3],[4,2],[3,2]];
const rank=(a,b)=>{const x=Math.min(a,b),y=Math.max(a,b);for(let i=0;i<C.length;i++)if(C[i][0]===y&&C[i][1]===x)return i;const i=D.findIndex(c=>c[0]===y&&c[1]===x);return i>=0?10+i:-1};
const truth=rank(d1,d2);
const dec=await api("declare",c1.uid,"Ana",{rank:truth});
const st3=(await api("rejoin",c2.uid,"Bil",{roomId:c1.room})).snap;
console.log("declare OK. now phase:",st3.phase,"pending challenger:",st3.pending&&st3.pending.challenger===c2.uid,"lastClaim:",st3.lastClaim&&st3.lastClaim.label);
// Bil trusts -> claim stands, Ana's turn again
const p=await api("pass",c2.uid,"Bil");
const st4=(await api("rejoin",c1.uid,"Ana",{roomId:c1.room})).snap;
console.log("pass OK. turn now:",st4.turnName,"lastClaim persists:",st4.lastClaim&&st4.lastClaim.label);
// chat
await api("chat",c2.uid,"Bil",{text:"godt spil! 🍺"});
console.log("FLOW COMPLETE ✅");
})().catch(e=>{console.error("FLOW FAIL:",e.message);process.exit(1)});