import { Filter, SimplePool, VerifiedEvent, kinds, validateEvent, verifyEvent } from 'nostr-tools' export class MetadataController { constructor() {} public findMetadata = async (hexKey: string) => { const mostPopularRelays = import.meta.env.VITE_MOST_POPULAR_RELAYS const hardcodedPopularRelays = (mostPopularRelays || '').split(' ') const specialMetadataRelay = 'wss://purplepag.es' const relays = [...hardcodedPopularRelays, specialMetadataRelay] const eventFilter: Filter = { kinds: [kinds.Metadata], authors: [hexKey] } const pool = new SimplePool() const events = await pool.querySync(relays, eventFilter).catch((err) => { console.error(err) return null }) if (events && events.length) { events.sort((a, b) => b.created_at - a.created_at) for (const event of events) { if (validateEvent(event) && verifyEvent(event)) { return event } } } throw new Error('Mo metadata found.') } public extractProfileMetadataContent = (event: VerifiedEvent) => { try { return JSON.parse(event.content) } catch (error) { console.log('error in parsing metadata event content :>> ', error) return null } } }