'use strict'; const STATES = ['idle', 'loading', 'success', 'error']; function showState(name) { STATES.forEach(function(s) { var el = document.getElementById('state-' + s); if (el) el.hidden = (s !== name); }); } function showError(msg) { var el = document.getElementById('error-message'); if (el) el.textContent = msg; showState('error'); } async function activate() { showState('loading'); try { var res = await fetch('/api/provision', { method: 'POST', headers: { 'Content-Type': 'application/json' }, // MAC address left empty — server resolves it via ARP from client IP body: JSON.stringify({ mac_address: '' }), }); var data; try { data = await res.json(); } catch (_) { data = {}; } if (res.status === 429) { showError(data.error || 'You already have an eSIM for this network. Only one per device per hour.'); return; } if (!res.ok) { showError(data.error || 'Server error (' + res.status + '). Please try again.'); return; } // Wire up download link var link = document.getElementById('download-link'); if (link && data.profile_url) { link.href = data.profile_url; } showState('success'); } catch (err) { showError('Could not reach the server. Make sure you are connected to the WiFi network.'); } } document.addEventListener('DOMContentLoaded', function() { var btnActivate = document.getElementById('btn-activate'); var btnRetry = document.getElementById('btn-retry'); if (btnActivate) btnActivate.addEventListener('click', activate); if (btnRetry) btnRetry.addEventListener('click', function() { showState('idle'); }); });