diff options
| author | Adam Soltys <[email protected]> | 2026-10-18 23:04:35 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-10-18 23:04:35 -0700 |
| commit | db3eda32859130781ee25aa462f2ae5839f3feb3 (patch) | |
| tree | 9ae35a7f1bf9864c4f6891f54bb9c9de77160118 /tools | |
| parent | f7dbd901043961ebbc96abe90adf4fba6a01dfb0 (diff) | |
| download | coinosv3-db3eda32859130781ee25aa462f2ae5839f3feb3.tar.gz coinosv3-db3eda32859130781ee25aa462f2ae5839f3feb3.zip | |
Streams on coinos's server: a ⚑ Report button (what's wrong, a note) for anyone signed in, and Take down for the admin (asks whether to bar the account too); a taken-down stream says so and plays nothing. Go live asks the server first: a name claimed less than a day ago is told when it can, and a barred account that it can't, Start off.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013ZDf1cyCQLkfjftYhymZAg
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/go-live-test.js | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/tools/go-live-test.js b/tools/go-live-test.js index fcc0bbf..990dc1a 100644 --- a/tools/go-live-test.js +++ b/tools/go-live-test.js @@ -18,8 +18,8 @@ const dir = mkdtempSync(tmpdir() + '/go-live-'); if (!process.env.NO_BUILD && Bun.spawnSync(['bun', 'build.js']).exitCode !== 0) throw new Error('build failed'); // the registrar, as the live server asks it: the name is whoever is sending's -let owner = null; -const names = Bun.serve({ port: 0, hostname: '127.0.0.1', fetch: (req) => Response.json(new URL(req.url).pathname.endsWith('/alice') && owner ? { taken: true, pubkey: owner } : { taken: false }) }); +let owner = null, nameCreated = null; +const names = Bun.serve({ port: 0, hostname: '127.0.0.1', fetch: (req) => Response.json(new URL(req.url).pathname.endsWith('/alice') && owner ? { taken: true, pubkey: owner, created: nameCreated } : { taken: false }) }); process.env.LIVE_DATA = dir; process.env.NAMES_URL = names.url.origin; process.env.LIVE_BASE = `http://localhost:${PORT}/live`; @@ -37,6 +37,7 @@ const server = Bun.serve({ port: PORT, websocket, fetch: async (req, srv) => { const path = new URL(req.url).pathname; if (path.startsWith('/live/')) { if (path === '/live/ingest') try { owner = JSON.parse(atob(new URL(req.url).searchParams.get('auth'))).pubkey; } catch {} + if (path === '/live/allowed') try { owner = JSON.parse(atob((req.headers.get('authorization') || '').replace(/^Nostr /, ''))).pubkey; } catch {} return live.handle(req, srv); } const f = Bun.file('dist' + path); @@ -111,6 +112,16 @@ try { await waitFor(() => !!document.querySelector('.feed-post-fab'), 15000); await page.evaluate(() => document.querySelector('.feed-post-fab').click()); check('the composer has a Go live button', await waitFor(() => !!document.querySelector('.go-live-tool'), 5000)); + // a name claimed an hour ago can't stream yet: the screen says when it can + nameCreated = Date.now() - 3600_000; + await page.evaluate(() => document.querySelector('.go-live-tool').click()); + check('a name claimed an hour ago is told it can go live a day after, Start off', await waitFor(() => !!document.querySelector('.go-live-refused') && /a day after you claimed it/.test(document.querySelector('.go-live-refused').textContent), 10000) + && await page.evaluate(() => document.querySelector('.go-live-start').disabled)); + await page.evaluate(() => document.querySelector('.live-page .chat-back, .live-page .iconbtn')?.click()); + nameCreated = Date.now() - 2 * 86400_000; + await waitFor(() => !document.querySelector('.go-live-start'), 5000); + if (!(await page.$('.go-live-tool'))) await page.evaluate(() => document.querySelector('.feed-post-fab').click()); + await waitFor(() => !!document.querySelector('.go-live-tool'), 5000); await page.evaluate(() => document.querySelector('.go-live-tool').click()); check('Go live shows the camera', await waitFor(() => { const v = document.querySelector('video.bc-preview'); return !!v && v.videoWidth > 0 && !v.paused; }, 10000)); check('...mirrored, as a front camera is', await page.evaluate(() => document.querySelector('video.bc-preview').classList.contains('mirror'))); |
