import { useState, useEffect, useCallback, useContext, useRef } from 'react';
import axios from 'axios';
import { nip57, nip19 } from 'nostr-tools';
import { NostrContext } from '@/context/NostrContext';
import { lnurlEncode } from '@/utils/lnurl';
import { parseEvent } from '@/utils/nostr';
import { v4 as uuidv4 } from 'uuid';
const defaultRelays = [
"wss://nos.lol/",
"wss://relay.damus.io/",
"wss://relay.snort.social/",
"wss://relay.nostr.band/",
"wss://nostr.mutinywallet.com/",
"wss://relay.mutinywallet.com/",
"wss://relay.primal.net/"
];
const AUTHOR_PUBKEY = process.env.NEXT_PUBLIC_AUTHOR_PUBKEY;
export function useNostr() {
const pool = useContext(NostrContext);
const subscriptionQueue = useRef([]);
const lastSubscriptionTime = useRef(0);
const throttleDelay = 2000;
const processSubscriptionQueue = useCallback(() => {
if (subscriptionQueue.current.length === 0) return;
const currentTime = Date.now();
if (currentTime - lastSubscriptionTime.current < throttleDelay) {
setTimeout(processSubscriptionQueue, throttleDelay);
return;
}
const subscription = subscriptionQueue.current.shift();
subscription();
lastSubscriptionTime.current = currentTime;
setTimeout(processSubscriptionQueue, throttleDelay);
}, [throttleDelay]);
const subscribe = useCallback(
(filters, opts) => {
if (!pool) return;
const subscriptionFn = () => {
return pool.subscribeMany(defaultRelays, filters, opts);
};
subscriptionQueue.current.push(subscriptionFn);
processSubscriptionQueue();
},
[pool, processSubscriptionQueue]
);
const publish = useCallback(
async (event) => {
if (!pool) return;
try {
console.log('publishing event', event)
const result = await Promise.any(pool.publish(defaultRelays, event));
console.log('result', result)
console.log('Published event to at least one relay');
return true;
} catch (error) {
console.error('Failed to publish event:', error);
return false;
}
},
[pool]
);
Aug 2, 2024
testing random resource
htyehsehfshyshf