Back to Napcraft
SOURCE / PINNED RELEASE

Made of little things.

Napcraft

Release
ee47ac6a25df…
Author-recorded commit
410dea87e109…
License
LICENSE
Author’s source reference
nostr://npub182jczunncwe0jn6frpqwq3e0qjws7yqqnc3auccqv9nte2dnd63scjm4rf/wss%3A%2F%2Fgit.napplet.soy%2F/n-52f9e22f5ce

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

tests/run-multiplayer.mjs
import { chromium, executable, frameOf } from './browser-support.mjs';
import { startLocalRelay, useLocalRelay, browserArgs } from './local-relay.mjs';
import scenario from './multiplayer.mjs';
import { writeFile } from 'node:fs/promises';
const relay = await startLocalRelay();
let browser;
const results = [];
try {
  browser = await chromium.launch({
    executablePath: executable,
    headless: true,
    args: browserArgs,
  });
  const players = [];
  for (let i = 0; i < 2; i++) {
    const context = await browser.newContext({
      viewport: { width: 1200, height: 900 },
    });
    await useLocalRelay(context, relay.config);
    const page = await context.newPage();
    page.on('pageerror', (e) => console.error('BROWSER ERROR', e.message));
    await page.goto(process.env.NAPCRAFT_URL || 'http://127.0.0.1:51696/');
    players.push({ page, frame: await frameOf(page) });
  }
  const check = (name, pass) => {
    results.push({ name, pass });
    console.log(pass ? 'PASS' : 'FAIL', name);
    if (!pass) throw Error(name);
  };
  await scenario({
    players,
    check,
    measure: (name, ms, max) => {
      results.push({ name, milliseconds: ms, budget: max, pass: ms <= max });
      console.log(name, ms.toFixed(1), 'ms');
      if (ms > max) throw Error(name);
    },
    diagnostics: () =>
      Promise.all(
        players.map((p) =>
          p.page.evaluate(() => window.soyliPreview.diagnostics()),
        ),
      ),
  });
} finally {
  await writeFile(
    '.napplet-space/multiplayer-independent.json',
    JSON.stringify(
      {
        network:
          'actual local TURN/TCP; 50ms outgoing delay ±15ms deterministic jitter; real soyLI host signaling',
        results,
      },
      null,
      2,
    ),
  );
  await browser?.close();
  await relay.close();
}