#!/usr/bin/env node // scripts/check_token_server_node.mjs // Node script that POSTs to /api/session and shows headers + body for easier debugging import fetch from 'node-fetch'; import process from 'process'; const server = process.argv[2]; const room = process.argv[3] || 'e2e-room'; const user = process.argv[4] || 'e2e-user'; if (!server) { console.error('Usage: node scripts/check_token_server_node.mjs [ROOM] [USERNAME]'); process.exit(2); } const sessionUrl = `${server.replace(/\/$/, '')}/api/session`; console.log('Checking token server at', sessionUrl); (async () => { try { // OPTIONS request to inspect CORS headers const opt = await fetch(sessionUrl, { method: 'OPTIONS', headers: { 'Origin': 'http://localhost:5176' } }); console.log('\nOPTIONS status', opt.status); console.log('OPTIONS headers:'); for (const [k, v] of opt.headers) { console.log(k + ':', v); } const resp = await fetch(sessionUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ room, username: user }), }); console.log('\nPOST status', resp.status); console.log('Response headers:'); for (const [k, v] of resp.headers) console.log(k + ':', v); const text = await resp.text(); console.log('\nBody:'); console.log(text); try { const json = JSON.parse(text); console.log('\nParsed JSON keys:', Object.keys(json)); } catch (e) { /* ignore */ } if (resp.status >= 200 && resp.status < 400) { let id = null; try { const js = JSON.parse(text); id = js.id || js.sessionId || js.session_id || null; } catch(e){} if (id) { const tokenUrl = `${server.replace(/\/$/, '')}/api/session/${id}/token`; const tresp = await fetch(tokenUrl); console.log('\nGET token status', tresp.status); console.log('GET token headers:'); for (const [k,v] of tresp.headers) console.log(k+':', v); const tb = await tresp.text(); console.log('\nGET token body:'); console.log(tb); } } } catch (err) { console.error('Error connecting to token server:', err && err.message ? err.message : err); process.exit(1); } })();