POWR/lib/hooks/useNDK.ts

73 lines
1.7 KiB
TypeScript
Raw Permalink Normal View History

import { useContext } from 'react';
import { NDKContext } from '@/lib/auth/ReactQueryAuthProvider';
import { useNDKStore } from '@/lib/stores/ndk';
import type { NDKUser, NDKEvent, NDKFilter } from '@nostr-dev-kit/ndk-mobile';
// Core hook for NDK access
// Uses the context from ReactQueryAuthProvider rather than Zustand store
export function useNDK() {
const { ndk, isInitialized } = useContext(NDKContext);
return {
ndk,
isLoading: !isInitialized,
error: !ndk && isInitialized ? new Error('NDK initialization failed') : undefined
};
}
// Hook for current user info
export function useNDKCurrentUser() {
const { currentUser, isAuthenticated, isLoading } = useNDKStore(state => ({
currentUser: state.currentUser,
isAuthenticated: state.isAuthenticated,
isLoading: state.isLoading
}));
return {
currentUser,
isAuthenticated,
isLoading
};
}
// Hook for authentication actions
export function useNDKAuth() {
const {
login,
loginWithExternalSigner,
logout,
generateKeys,
isAuthenticated,
isLoading
} = useNDKStore(state => ({
login: state.login,
loginWithExternalSigner: state.loginWithExternalSigner,
logout: state.logout,
generateKeys: state.generateKeys,
isAuthenticated: state.isAuthenticated,
isLoading: state.isLoading
}));
return {
login,
loginWithExternalSigner,
logout,
generateKeys,
isAuthenticated,
isLoading
};
}
// New hook for event operations
export function useNDKEvents() {
const { publishEvent, fetchEventsByFilter } = useNDKStore(state => ({
publishEvent: state.publishEvent,
fetchEventsByFilter: state.fetchEventsByFilter
}));
return {
publishEvent,
fetchEventsByFilter
};
}