#!/usr/bin/env node // create_session.js // Usage: node scripts/create_session.js [room] [username] [--open] // Environment overrides: BACKEND (default http://localhost:4000) or TOKEN_SERVER env const fetch = require('node-fetch'); const child = require('child_process'); async function main() { console.log('[create_session] starting'); const args = process.argv.slice(2).filter(a => !a.startsWith('--')); const openFlag = process.argv.slice(2).some(a => a === '--open'); const room = args[0] || `broadcast-${Math.random().toString(36).slice(2,8)}`; const username = args[1] || 'browser-user'; const backend = process.env.BACKEND || process.env.VITE_BACKEND_API_URL || process.env.VITE_TOKEN_SERVER_URL || 'http://localhost:4000'; const base = backend.replace(/\/$/, ''); const url = `${base}/api/session`; console.log('[create_session] Creating session on', url); console.log('[create_session] room=', room, 'username=', username); try { const controller = new AbortController(); const timeout = setTimeout(() => controller.abort(), 15000); const r = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ room, username }), signal: controller.signal }); clearTimeout(timeout); console.log('[create_session] response status=', r.status); const text = await r.text().catch(() => null); console.log('[create_session] response body (raw):', text && text.slice(0,2000)); let json = null; try { json = text ? JSON.parse(text) : null; } catch (e) { json = null } if (!r.ok) { console.error('[create_session] Request failed status=', r.status); console.error('[create_session] Body:', text); process.exit(2); } const id = (json && (json.id || json.sessionId)) || null; if (!id) { console.error('[create_session] No session id in response:', json || text); process.exit(3); } const studioHost = process.env.BROADCAST_HOST || 'https://avanzacast-broadcastpanel.bfzqqk.easypanel.host'; const sessionUrl = `${studioHost.replace(/\/$/, '')}/${encodeURIComponent(id)}`; console.log('[create_session] Session created:', JSON.stringify(json, null, 2)); console.log('[create_session] Open Studio URL:', sessionUrl); if (openFlag) { // xdg-open for linux try { child.execSync(`xdg-open "${sessionUrl}"`); } catch (e) { console.warn('[create_session] Failed to open browser automatically:', String(e.message || e)); } } process.exit(0); } catch (err) { if (err.name === 'AbortError') { console.error('[create_session] request timed out'); } else { console.error('[create_session] Failed to create session:', String(err)); } process.exit(1); } } main();