54 lines
1.2 KiB
TypeScript
54 lines
1.2 KiB
TypeScript
|
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
|
||
|
}
|
||
|
}
|
||
|
}
|