plebdevs/src/context/NDKContext.js

49 lines
1.5 KiB
JavaScript
Raw Normal View History

import React, { createContext, useContext, useEffect, useState, useMemo } from 'react';
import NDK, { NDKNip07Signer } from "@nostr-dev-kit/ndk";
2024-08-25 18:15:45 -05:00
import NDKCacheAdapterDexie from "@nostr-dev-kit/ndk-cache-dexie";
import { useLocalStorage } from "@/hooks/useLocalStorage";
2024-09-17 13:55:51 -05:00
import appConfig from "@/config/appConfig";
const NDKContext = createContext(null);
export const NDKProvider = ({ children }) => {
const [ndk, setNdk] = useState(null);
2024-09-17 13:55:51 -05:00
const [userRelays, setUserRelays] = useLocalStorage("userRelays", appConfig.defaultRelayUrls);
const createNDKInstance = (relays) => {
2024-09-17 13:55:51 -05:00
const allRelays = [...new Set([...appConfig.defaultRelayUrls, ...relays])];
return new NDK({
explicitRelayUrls: allRelays,
enableOutboxModel: true,
outboxRelayUrls: ["wss://nos.lol/"],
cacheAdapter: new NDKCacheAdapterDexie({ dbName: 'ndk-cache' })
});
};
useEffect(() => {
setNdk(createNDKInstance(userRelays));
}, [userRelays]);
const reInitializeNDK = () => {
const newInstance = createNDKInstance(userRelays);
setNdk(newInstance);
};
const addSigner = async () => {
if (ndk) {
const nip07signer = new NDKNip07Signer();
await ndk.signer?.user();
ndk.signer = nip07signer;
}
};
return (
<NDKContext.Provider value={{ ndk, addSigner, reInitializeNDK, userRelays, setUserRelays }}>
{children}
</NDKContext.Provider>
);
};
export const useNDKContext = () => {
return useContext(NDKContext);
};