/ src / hooks / useCurrentUser.ts
useCurrentUser.ts
 1  import { type NLoginType, NUser, useNostrLogin } from '@nostrify/react/login';
 2  import { useNostr } from '@nostrify/react';
 3  import { useCallback, useMemo } from 'react';
 4  
 5  import { useAuthor } from './useAuthor.ts';
 6  
 7  export function useCurrentUser() {
 8    const { nostr } = useNostr();
 9    const { logins } = useNostrLogin();
10  
11    const loginToUser = useCallback((login: NLoginType): NUser  => {
12      switch (login.type) {
13        case 'nsec': // Nostr login with secret key
14          return NUser.fromNsecLogin(login);
15        case 'bunker': // Nostr login with NIP-46 "bunker://" URI
16          return NUser.fromBunkerLogin(login, nostr);
17        case 'extension': // Nostr login with NIP-07 browser extension
18          return NUser.fromExtensionLogin(login);
19        // Other login types can be defined here
20        default:
21          throw new Error(`Unsupported login type: ${login.type}`);
22      }
23    }, [nostr]);
24  
25    const users = useMemo(() => {
26      const users: NUser[] = [];
27  
28      for (const login of logins) {
29        try {
30          const user = loginToUser(login);
31          users.push(user);
32        } catch (error) {
33          console.warn('Skipped invalid login', login.id, error);
34        }
35      }
36  
37      return users;
38    }, [logins, loginToUser]);
39  
40    const user = users[0] as NUser | undefined;
41    const author = useAuthor(user?.pubkey);
42  
43    return {
44      user,
45      users,
46      ...author.data,
47    };
48  }