// account-auth.el -- Supabase OTP magic-link auth for the account page. // Sends a PKCE magic link to the user's email address. // Compiled with: elc --target=js --bundle --minify --obfuscate // // Required HTML elements: #acct-email-input, #acct-magic-btn, #acct-email-msg // Required globals: window.NEURON_CFG.supabase_url, window.NEURON_CFG.supabase_anon_key // Required CDN: supabase-js@2 loaded before this script fn main() -> Void { native_js("(function() { 'use strict'; var cfg = window.NEURON_CFG || {}; var sb = supabase.createClient(cfg.supabase_url, cfg.supabase_anon_key, { auth: { flowType: 'pkce' } }); window.sendMagicLink = async function() { var email = (document.getElementById('acct-email-input').value || '').trim(); var msgEl = document.getElementById('acct-email-msg'); var btn = document.getElementById('acct-magic-btn'); if (!email) { msgEl.style.display = 'block'; msgEl.style.color = '#c44'; msgEl.textContent = 'Please enter your email address.'; return; } if (btn) { btn.disabled = true; btn.textContent = 'Sending...'; } var result = await sb.auth.signInWithOtp({ email: email }); if (btn) { btn.disabled = false; btn.textContent = 'Continue with email'; } msgEl.style.display = 'block'; if (result.error) { msgEl.style.color = '#c44'; msgEl.textContent = result.error.message; } else { msgEl.style.color = 'var(--navy)'; msgEl.textContent = 'Check your inbox — we sent a sign-in link to ' + email + '.'; } }; })()") }