window.onload = function () { if (!window.nostr) { console.log('Nostr extension not present'); document.querySelector('#login-button').disabled = true; document.querySelector('#no-extension-nudges').style.display = 'block'; } else { console.log('Nostr extension present'); } }; async function login() { let challengeResponse; try { challengeResponse = await fetch('/api/login/nostr-challenge', { method: 'GET', headers: { 'Content-Type': 'application/json', }, }); } catch (error) { console.log(`Something went wrong: ${error}`); return; } const { challenge } = await challengeResponse.json(); let pubkey; try { pubkey = await window.nostr.getPublicKey(); } catch (error) { document.querySelector('#rejected-nostr-nudges').style.display = 'block'; return; } const event = { kind: 22242, created_at: Math.floor(Date.now() / 1000), tags: [['challenge', challenge]], content: 'Sign this challenge to authenticate', pubkey: pubkey, }; let signedEvent; try { signedEvent = await window.nostr.signEvent(event); } catch (error) { document.querySelector('#rejected-nostr-nudges').style.display = 'block'; return; } let verifyResponse; try { verifyResponse = await fetch('/api/login/nostr-verify', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(signedEvent), }); } catch (error) { console.log(`Something went wrong: ${error}`); return; } if (verifyResponse.status === 403) { document.querySelector('#rejected-public-key').style.display = 'block'; } if (verifyResponse.ok) { document.querySelector('#sign-up-success').style.display = 'block'; setTimeout(() => { window.location.href = '/home'; }, 1000); } }