Assistant: codex Assistant-Model: gpt-6.1-sol Assistant-Session: 01a1abf1-7e95-7141-87c9-ee78332bf790
46 lines
2.9 KiB
JavaScript
46 lines
2.9 KiB
JavaScript
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('<h1>Synthetic callback received</h1>');});
|
|
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(`<h1>You are signed in — synthetic</h1><a href="http://${host}:${port}/oidc/callback?state=synthetic">Continue</a>`);
|
|
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;});
|