import { entropyToMnemonic } from '/public/utils/bip39.ts'; const urlParams = new URLSearchParams(globalThis.location.search); const codeParam = urlParams.get('code'); if (codeParam) { const input = document.getElementById('inviteCode'); if (input) { input.value = codeParam; document.getElementById('username')?.focus(); } } let generatedMnemonic = ""; const registerBtn = document.getElementById('registerBtn'); if (registerBtn) { registerBtn.addEventListener('click', async () => { const username = document.getElementById('username').value.trim(); const inviteCode = document.getElementById('inviteCode').value.trim(); if (!username || !inviteCode) { setStatus("Username and Invite Code are required.", true); return; } const loader = document.getElementById('loadingIndicator'); const btn = document.getElementById('registerBtn'); loader.style.display = 'block'; btn.disabled = true; setStatus(''); try { const res = await startWebAuthnRegistration(username, inviteCode); if (res && res.success) { // Generate 16 bytes of entropy for 12 BIP-39 words const entropy = new Uint8Array(16); crypto.getRandomValues(entropy); generatedMnemonic = await entropyToMnemonic(entropy); const words = generatedMnemonic.split(' '); const grid = document.getElementById('wordGrid'); grid.innerHTML = words.map((w, idx) => `
${idx + 1}. ${w}
`).join(''); // Switch to Step 2 document.getElementById('step1Container').style.display = 'none'; document.getElementById('step2Container').style.display = 'block'; document.getElementById('registerTitle').textContent = "Recovery Voucher"; document.getElementById('registerSubtitle').textContent = "Save your 12-word backup key in a safe place."; } } catch (err) { console.error(err); } finally { loader.style.display = 'none'; btn.disabled = false; } }); } const copyWordsBtn = document.getElementById('copyWordsBtn'); if (copyWordsBtn) { copyWordsBtn.addEventListener('click', async () => { if (!generatedMnemonic) return; try { await navigator.clipboard.writeText(generatedMnemonic); const btn = document.getElementById('copyWordsBtn'); const origHtml = btn.innerHTML; btn.innerHTML = '✓ Copied to Clipboard!'; btn.style.borderColor = 'var(--success)'; btn.style.color = 'var(--success-text)'; setTimeout(() => { btn.innerHTML = origHtml; btn.style.borderColor = ''; btn.style.color = ''; }, 2500); } catch (_e) { alert("Select and copy the words manually: " + generatedMnemonic); } }); } function setStatus(msg, isError) { const statusDiv = document.getElementById('statusMessage'); if (!statusDiv) return; if (msg) { statusDiv.textContent = msg; statusDiv.className = isError ? 'error' : 'success'; statusDiv.style.display = 'block'; } else { statusDiv.style.display = 'none'; } }