const http = require('http'); const fs = require('fs'); const {chromium} = require('/home/worsch/coulomb-social/scripts/node_modules/playwright'); async function main() { const spec = JSON.parse(fs.readFileSync('/home/worsch/coulomb-social/scripts/node_modules/playwright-core/browsers.json')); const rev = spec.browsers.find(x => x.name === 'chromium').revision; const executablePath = `/home/worsch/.cache/ms-playwright/chromium-${rev}/chrome-linux64/chrome`; const server = http.createServer((req,res) => {res.writeHead(200,{'Content-Type':'text/html'});res.end('

Synthetic callback received

');}); await new Promise(resolve => server.listen(0,'127.0.0.1',resolve)); const port = server.address().port; let browser; const results = {synthetic_only:true,native_login:false,headless:!process.argv.includes("--headed")}; let stage = 'browser_launch'; try { let start = Date.now(); browser = await chromium.launch({executablePath,headless:results.headless,chromiumSandbox:true,timeout:20000}); results.launch_ms = Date.now()-start; results.version = browser.version(); results.callbacks = []; for(const host of ['localhost','127.0.0.1']) { const context = await browser.newContext(); const page = await context.newPage(); stage = 'public_discovery';start=Date.now(); await page.goto('https://kc.coulomb.social/.well-known/openid-configuration',{waitUntil:'domcontentloaded',timeout:15000}); const discovery_ms = Date.now()-start; await page.setContent(`

You are signed in — synthetic

Continue`); stage = 'synthetic_callback';start=Date.now(); let error_kind = null; try { await Promise.all([page.waitForURL(`http://${host}:${port}/oidc/callback?state=synthetic`,{timeout:10000,waitUntil:'domcontentloaded'}),page.getByRole('link',{name:'Continue'}).click({timeout:10000})]); await page.getByRole('heading',{name:'Synthetic callback received'}).waitFor({timeout:1000}); } catch(error) {error_kind=/ERR_CONNECTION_RESET/.test(error.message)?'connection_reset':/ERR_CONNECTION_REFUSED/.test(error.message)?'connection_refused':/Timeout/.test(error.name)?'timeout':'browser_error';} results.callbacks.push({host,discovery_ms,callback_ms:Date.now()-start,error_kind}); await context.close(); } results.status='complete'; } catch(error) { results.status='failed';results.stage=stage;results.error_kind=error.name; results.permission_error=/Operation not permitted|Permission denied|No usable sandbox/.test(error.message); } finally { if(browser)await browser.close(); await new Promise(resolve => server.close(resolve)); } process.stdout.write(JSON.stringify(results,null,2)+'\n'); } main().catch(() => {process.stdout.write('{"status":"probe_setup_failed","details_suppressed":true}\n');process.exitCode=1;});