const assert = require('node:assert/strict'); const { fixture } = require('./check-api.cjs'); (async () => { let release; const f = fixture(new Map(), { intercept(path, body, ok) { if (path !== 'activityConfig/list') return false; release = () => ok({ schemaVersion: 1, serverNow: f.info.serverTime, activities: [] }); return true; } }); const early = f.client.readForDisplay(); const recovery = f.client.refresh(); let recovered = false; recovery.then(() => recovered = true); const data = await early; await new Promise(resolve => setImmediate(resolve)); assert.equal(data.state.config.periodId, f.periodId); assert.equal(recovered, false, 'first display does not wait for slow schedule/recovery'); assert.equal(f.calls.filter(c => c.body.action === 'info').length, 1); assert.equal(await f.client.readForDisplay(), data, 'opening during recovery reuses first snapshot'); release(); await recovery; assert.equal(recovered, true); assert(f.calls.some(c => c.body.action === 'settlements'), 'background settlement still runs'); const broken = fixture(new Map(), { intercept(path, body, ok, fail) { if (body.action !== 'info') return false; fail('NETWORK_UNKNOWN'); return true; } }); await assert.rejects(broken.client.readForDisplay()); broken.server.intercept = null; assert((await broken.client.readForDisplay()).state, 'failed first read can retry'); await broken.client.refresh(); console.log('PASS: first snapshot before slow recovery, shared requests, settlement recovery and read retry'); })().catch(error => { console.error(error); process.exitCode = 1; });