@nostr-dev-kit/ndk-mobile
Version:
NDK Mobile
34 lines (29 loc) • 1.3 kB
text/typescript
import type { SessionStartOptions } from "@nostr-dev-kit/ndk-hooks";
import { useNDKSessionMonitor } from "@nostr-dev-kit/ndk-hooks";
import { useEffect, useRef, useState } from "react";
import { NDKSessionExpoSecureStore, migrateLegacyLogin } from "./session-storage-adapter.js";
/**
* Hook to monitor NDK session state and persist changes to secure storage.
* It also loads persisted sessions on initial mount and handles legacy login migration.
*
* This is a wrapper around the useNDKSessionMonitor hook from ndk-hooks,
* providing a SecureStore-based storage adapter and handling mobile-specific migration.
*
* @param opts Optional session monitor options
* @returns null
*/
export function useSessionMonitor(opts?: SessionStartOptions) {
const [isMigrated, setIsMigrated] = useState(false);
const secureStoreAdapter = useRef(new NDKSessionExpoSecureStore());
// Handle legacy login migration
useEffect(() => {
if (!isMigrated) {
migrateLegacyLogin(secureStoreAdapter.current).then(() => {
setIsMigrated(true);
});
}
}, [isMigrated]);
// Use the core session monitor hook with our SecureStore adapter
useNDKSessionMonitor(isMigrated ? secureStoreAdapter.current : false, opts);
return null;
}