#!/bin/bash
# Boot a keet-daemon (hyper-tps tree, keet-core 4.17.3) --daemon-only on ISOLATED
# test storage, then run gamestate-uds-test.cjs against it (fresh real room).
# Self-contained: nothing touches the real ~/.config/keet-cli.
set -u
HT=/storage/projects/code/godot/hyper-tps
BARE=/home/fleeky/.nvm/versions/node/v24.13.0/bin/bare
SOCK=/tmp/keet-gstest.sock
STORE=$(mktemp -d /tmp/keet-gstest-store.XXXXXX)
LAUNCH=$(mktemp /tmp/keet-gstest-launch.XXXXXX.mjs)
cat > "$LAUNCH" <<EOF
import { startDaemon } from '$HT/node_modules/keet-daemon/index.js'
const d = await startDaemon({ storage: '$STORE', socketPath: '$SOCK', pidFile: '$SOCK.pid', debug: false })
await d.core.backendAPI.ready()
console.log('GSTEST_DAEMON_READY')
setTimeout(() => Bare.exit(0), 180000)
EOF
cleanup () { [ -n "${DPID:-}" ] && kill "$DPID" 2>/dev/null; rm -rf "$STORE" "$LAUNCH" "$SOCK" "$SOCK.pid" 2>/dev/null; }
trap cleanup EXIT
echo "== booting daemon-only (isolated storage $STORE) =="
rm -f "$SOCK" "$SOCK.pid"
"$BARE" "$LAUNCH" > /tmp/keet-gstest-daemon.log 2>&1 &
DPID=$!
for i in $(seq 1 40); do [ -S "$SOCK" ] && break; sleep 1; done
if [ ! -S "$SOCK" ]; then echo "FAIL: daemon socket never came up"; cat /tmp/keet-gstest-daemon.log | tail; exit 1; fi
sleep 2
echo "== running gamestate UDS test suite =="
KEET_SOCK="$SOCK" node "$HT/scripts/gamestate-uds-test.cjs"
RC=$?
echo "== suite exit: $RC =="
exit $RC