// Optional real HTTPS transport for disposable browser acceptance. This is a // temporary public tunnel, never durable-hosting evidence or a deployment. const fs = require('node:fs'), os = require('node:os'), path = require('node:path'); const { spawn } = require('node:child_process'); exports.httpsMarketplace = async function(port, out) { const home = fs.mkdtempSync(path.join(os.tmpdir(), 'cg-tunnel-')); const logPath = path.join(out,'https-tunnel.log'), log = fs.openSync(logPath,'w'); const child = spawn('cloudflared', ['tunnel','--no-autoupdate','--protocol','http2','--metrics','127.0.0.1:0','--url',`http://127.0.0.1:${port}`], { env: { PATH: process.env.PATH, HOME: home }, stdio: ['ignore',log,log], }); let failure, closed = false; child.on('error', e=>failure=e); child.on('close',()=>closed=true); const close = async () => { if (!closed) { child.kill('SIGTERM'); await new Promise(resolve=>child.once('close',resolve)); } fs.closeSync(log); fs.rmSync(home,{recursive:true,force:true}); }; try { const deadline = Date.now()+90000; while (Date.now()setTimeout(resolve,500)); } throw Error('Test HTTPS tunnel did not become reachable; see https-tunnel.log'); } catch(error) { await close(); throw error; } };