// components/sheets/NostrLoginSheet.tsx import React, { useState } from 'react'; import { View, ActivityIndicator, Modal, TouchableOpacity } from 'react-native'; import { Text } from '@/components/ui/text'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { X, Info } from 'lucide-react-native'; import { useNDKAuth } from '@/lib/hooks/useNDK'; import { useColorScheme } from '@/lib/useColorScheme'; interface NostrLoginSheetProps { open: boolean; onClose: () => void; } export default function NostrLoginSheet({ open, onClose }: NostrLoginSheetProps) { const [privateKey, setPrivateKey] = useState(''); const [error, setError] = useState(null); const { login, generateKeys, isLoading } = useNDKAuth(); const { isDarkColorScheme } = useColorScheme(); // Handle key generation const handleGenerateKeys = async () => { try { const { nsec } = generateKeys(); setPrivateKey(nsec); setError(null); } catch (err) { setError('Failed to generate keys'); console.error('Key generation error:', err); } }; // Handle login const handleLogin = async () => { if (!privateKey.trim()) { setError('Please enter your private key or generate a new one'); return; } setError(null); try { const success = await login(privateKey); if (success) { setPrivateKey(''); onClose(); } else { setError('Failed to login with the provided key'); } } catch (err) { console.error('Login error:', err); setError(err instanceof Error ? err.message : 'An unexpected error occurred'); } }; return ( Login with Nostr Enter your Nostr private key (nsec) {error && ( {error} )} What is a Nostr Key? Nostr is a decentralized protocol where your private key (nsec) is your identity and password. Your private key is securely stored on your device and is never sent to any servers. ); }