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.
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();
}
