You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.6 KiB
57 lines
1.6 KiB
<script lang="ts"> |
|
import { authenticateWithNIP07 } from '../../lib/services/nostr/auth-handler.js'; |
|
import { isNIP07Available } from '../../lib/services/auth/nip07-signer.js'; |
|
import { goto } from '$app/navigation'; |
|
import { onMount } from 'svelte'; |
|
import { nostrClient } from '../../lib/services/nostr/nostr-client.js'; |
|
|
|
onMount(async () => { |
|
await nostrClient.initialize(); |
|
}); |
|
|
|
let error = $state<string | null>(null); |
|
let loading = $state(false); |
|
|
|
async function loginWithNIP07() { |
|
if (!isNIP07Available()) { |
|
error = 'NIP-07 extension not available. Please install a Nostr extension like Alby or nos2x.'; |
|
return; |
|
} |
|
|
|
loading = true; |
|
error = null; |
|
|
|
try { |
|
await authenticateWithNIP07(); |
|
goto('/'); |
|
} catch (err) { |
|
error = err instanceof Error ? err.message : 'Authentication failed'; |
|
} finally { |
|
loading = false; |
|
} |
|
} |
|
</script> |
|
|
|
<main class="container mx-auto px-4 py-8 max-w-md"> |
|
<h1 class="text-2xl font-bold mb-4 text-fog-text dark:text-fog-dark-text">Login</h1> |
|
|
|
{#if error} |
|
<div class="bg-red-50 border border-red-200 text-red-800 px-4 py-3 rounded mb-4"> |
|
{error} |
|
</div> |
|
{/if} |
|
|
|
<div class="space-y-4"> |
|
<button |
|
onclick={loginWithNIP07} |
|
disabled={loading} |
|
class="w-full px-4 py-2 bg-fog-accent dark:bg-fog-dark-accent text-white hover:opacity-90 disabled:opacity-50 transition-colors rounded" |
|
> |
|
{loading ? 'Connecting...' : 'Login with NIP-07'} |
|
</button> |
|
|
|
<p class="text-sm text-fog-text-light dark:text-fog-dark-text-light"> |
|
Other authentication methods (nsec, anonymous) coming soon... |
|
</p> |
|
</div> |
|
</main>
|
|
|