Back to Supersonic RC Revive
SOURCE / PINNED RELEASE

Made of little things.

Supersonic RC Revive

Release
bb8b570f3600…
Author-recorded commit
073e2d2c0e63…
License
LICENSE
Author’s source reference
nostr://npub1ye5ptcxfyyxl5vjvdjar2ua3f0hynkjzpx552mu5snj3qmx5pzjscpknpr/wss%3A%2F%2Fgit.shakespeare.diy%2F/SuperSonicRCRevive

Archive hash verified: 857599401cc78951…. The source-to-build association is the author’s claim; it has not been independently rebuilt.

tests/online-private-scenario.mjs
// Trusted local scenario: a private room code over NAP-WEBRTC only (no CVM room).
import { runOnlineScenario } from './online-scenario-shared.mjs';

export default context => runOnlineScenario(context, async (players, ready, check) => {
  const [first, ...friends] = players;
  await first.frame.evaluate(() => {
    const cvm = window.napplet.cvm;
    window.__onlineCvmCalls = 0;
    if (cvm) for (const key of Object.keys(cvm)) if (typeof cvm[key] === 'function') {
      const call = cvm[key].bind(cvm);
      cvm[key] = (...args) => { window.__onlineCvmCalls++; return call(...args); };
    }
  });
  // Stand in for signed-in users: the soyLI test guests have no Nostr login or kind 0 profiles.
  // Only identity/profile answers are stubbed; names still travel in real room beacons.
  await Promise.all(players.map((p, i) => p.frame.evaluate(i => {
    const key = String(i + 1).repeat(64);
    window.napplet.identity = { ...window.napplet.identity, getPublicKey: async () => key };
    window.napplet.common = { ...window.napplet.common, getProfile: async pubkey => ({ ok: true, pubkey, profile: { name: `Driver ${pubkey[0]}` } }) };
  }, i)));
  await first.frame.getByRole('button',{name:'Private room',exact:true}).click();
  await first.frame.getByRole('button',{name:'New room',exact:true}).click();
  await ready(first);
  const code = await first.frame.getByRole('textbox',{name:'Room code',exact:true}).inputValue();
  check('short room code shown', /^[A-Z2-9]{3}-[A-Z2-9]{3}$/.test(code));
  for (const friend of friends) {
    await friend.frame.getByRole('button',{name:'Private room',exact:true}).click();
    await friend.frame.getByRole('textbox',{name:'Room code',exact:true}).fill(code.toLowerCase());
    await friend.frame.getByRole('button',{name:'Join room',exact:true}).click();
    await ready(friend);
  }
  await first.frame.waitForFunction(n => {
    const labels = JSON.parse(document.querySelector('canvas')?.dataset.remoteLabels ?? '[]');
    return labels.length === n && labels.every(l => /^Driver [2-9]$/.test(l));
  }, friends.length, {timeout: 30000});
  check('remote name tags show profile names from NAP-COMMON', true);
  check('private room used no CVM calls', await first.frame.evaluate(() => window.__onlineCvmCalls === 0));
});