ident
All repositories: gitoria
2.7 KB
// tests/dev-smoke.mjs — a login against the RUNNING DEV server (ident :8351) in one real// headless Chrome (time zone emulated Europe/Vienna): email → OTP read from the dev mail// sink → signed in → the identity list is shown. The first run creates [email protected]// in the DEV store (default identity, welcome form → Skip); later runs just sign in.// Rate limit: max 3 runs per 10 minutes.//// node tests/dev-smoke.mjs [identUrl] default http://100.77.141.84:8351//// Debug ports 8660-8669; Chrome is killed by PID at the end.import { readFileSync, existsSync } from 'node:fs';import { dirname, join, resolve } from 'node:path';import { fileURLToPath } from 'node:url';import { launchBrowser } from './cdp.mjs';if (!process.env.HL_CHROME && existsSync('/opt/google/chrome/chrome')) process.env.HL_CHROME = '/opt/google/chrome/chrome';const APP = resolve(dirname(fileURLToPath(import.meta.url)), '..');const SINK = join(APP, 'storage/mail-sink.txt');const IDENT = process.argv[2] || 'http://100.77.141.84:8351';const EMAIL = '[email protected]';const codes = () => existsSync(SINK) ? readFileSync(SINK, 'utf8').split('\n').filter(l => l.startsWith(EMAIL + ' ')).map(l => l.split(' ')[1]) : [];let br, ok = false;try {br = await launchBrowser({ debugPortRange: [8660, 8669] });const p = await br.newPage();await p.send('Emulation.setTimezoneOverride', { timezoneId: 'Europe/Vienna' });await p.goto(IDENT + '/');if (await p.evaluate('!!document.querySelector("#signout")')) throw new Error('fresh browser is signed in?');await p.waitFor('!!window.__hl && window.__hl.socket && window.__hl.socket.readyState === 1', { label: 'socket' });const before = codes().length;await p.type('#email', EMAIL);await p.click('#sendcode');await p.waitFor('!!document.querySelector("#code") || /\\S/.test(document.querySelector("#message").textContent)', { label: 'code form' });if (codes().length !== before + 1) throw new Error('no new code in ' + SINK + ' — page says: ' + await p.text('#message'));await p.type('#code', codes().at(-1));await p.click('#verify');await p.waitFor('!!document.querySelector("#identities")', { label: 'signed in' });if (await p.evaluate('!!document.querySelector("#skip")')) { console.log('first login: welcome form shown → Skip'); await p.click('#skip'); }console.log('signed in as:', await p.text('#meemail'), '| time zone:', await p.text('#timezone'));console.log('identities:', JSON.stringify(await p.evaluate(`[...document.querySelectorAll('#identities identity-label')].map(e => e.textContent)`)));ok = (await p.text('#meemail')) === EMAIL;} catch (e) {console.log('FAILED', e && e.message || e);} finally {if (br) await br.close();console.log(ok ? 'SMOKE OK' : 'SMOKE FAILED');process.exit(ok ? 0 : 1);}
Branches
- mainmain branch
Latest commits
- fe183516ident mission 009 (3/4): let only where reassigned — 293 never-reassigned lets are plain declarations; kept: reassigned, loop bodies, names of a file member, a name declared twice in one function; same outputmre
- d2e7f91bident mission 009 (2/4): one lib file per topic (login, accounts, identities, apps, invites, selector, notify + helpers, util), function routes as thin wrappers in lib/api.hl, project.hl = the map; same outputmre
- 91017164ident mission 009 (1/4): file moves — the root .hl files into lib/ (api.hl → lib/api-helpers.hl), styles.hl → components/styles.hl; imports adjusted, no other changemre
- f8bdcbc2ident: Hybriel master 06617221 (plugin allocators 3a781359 + 413f60e4, mpackdb 2cb7ae5e, http1 773de63e); all gates greenmre
- ff78726cident: Hybriel master 190aa11d (fc838894 GC correctness, #127, #126 closure scopes); gates all greenmre
- a3a7d21aident: Hybriel master 8efba065 (#126 GC by bytes, #48 lambda params copy); session-writing lambdas take &sessionmre
- 98226b41antcolony#40: mission references point to the moved missionsmre
- ff805b9aantcolony#40: history (LOG.md), worker briefs (missions/) and reports moved here from antcolony, numbered per project; old numbers in antcolony docs/mission-map.mdmre
- 51a7bcdfident: Hybriel master 73267707 (#122); /code uses the new page() signature; pending address passed as parameter; once-checksmre
- 836f644fident#24: installable app (manifest, service worker, data-free offline /start), own iconmre
- 8bebbbf2deploy.sh: back up live storage/.sessions/.env before every deploy (newest 5 kept)mre
- cc063ea2deploy.sh: never send .git or .gitignore to Byrodinmre
- 81b15b7bState of 2026-09-27, before the move to gitoriamre