From 7cf7df88db82a77b5df054ab086c850d6b2e531b Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Mon, 19 Feb 2024 18:54:18 -0300 Subject: [PATCH] nip46: skip duplicates on fetchBunkerProviders (prev fetchCustodialBunkers). --- nip46.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/nip46.ts b/nip46.ts index 14c444f..e2aae1d 100644 --- a/nip46.ts +++ b/nip46.ts @@ -279,22 +279,35 @@ export async function createAccount( return rpc } +// @deprecated use fetchBunkerProviders instead +export const fetchCustodialBunkers = fetchBunkerProviders + /** * Fetches info on available providers that announce themselves using NIP-89 events. * @returns A promise that resolves to an array of available bunker objects. */ -export async function fetchCustodialBunkers(pool: AbstractSimplePool, relays: string[]): Promise { +export async function fetchBunkerProviders(pool: AbstractSimplePool, relays: string[]): Promise { const events = await pool.querySync(relays, { kinds: [Handlerinformation], '#k': [NostrConnect.toString()], }) + events.sort((a, b) => b.created_at - a.created_at) + // validate bunkers by checking their NIP-05 and pubkey // map to a more useful object const validatedBunkers = await Promise.all( - events.map(async event => { + events.map(async (event, i) => { try { const content = JSON.parse(event.content) + + // skip duplicates + try { + if (events.findIndex(ev => JSON.parse(ev.content).nip05 === content.nip05) !== i) return undefined + } catch (err) { + /***/ + } + const bp = await queryBunkerProfile(content.nip05) if (bp && bp.pubkey === event.pubkey && bp.relays.length) { return {