nip46: omit custodial bunker providers that don't have relays configured.

This commit is contained in:
fiatjaf
2024-02-12 09:04:27 -03:00
parent 177e673d83
commit 566a2deea3

View File

@@ -93,6 +93,10 @@ export class BunkerSigner {
* @param secretKey - An optional key pair. * @param secretKey - An optional key pair.
*/ */
public constructor(clientSecretKey: Uint8Array, bp: BunkerPointer, params: BunkerSignerParams = {}) { public constructor(clientSecretKey: Uint8Array, bp: BunkerPointer, params: BunkerSignerParams = {}) {
if (bp.relays.length === 0) {
throw new Error('no relays are specified for this bunker')
}
this.pool = params.pool || new SimplePool() this.pool = params.pool || new SimplePool()
this.secretKey = clientSecretKey this.secretKey = clientSecretKey
this.relays = bp.relays this.relays = bp.relays
@@ -242,25 +246,23 @@ export async function createAccount(
} }
/** /**
* Fetches info on available signers (nsecbunkers) using NIP-89 events. * Fetches info on available providers that announce themselves using NIP-89 events.
*
* @returns A promise that resolves to an array of available bunker objects. * @returns A promise that resolves to an array of available bunker objects.
*/ */
export async function fetchCustodialbunkers(pool: AbstractSimplePool, relays: string[]): Promise<BunkerProfile[]> { export async function fetchCustodialbunkers(pool: AbstractSimplePool, relays: string[]): Promise<BunkerProfile[]> {
const events = await pool.querySync(relays, { kinds: [Handlerinformation] }) const events = await pool.querySync(relays, {
// filter for events that handle the connect event kind kinds: [Handlerinformation],
const filteredEvents = events.filter(event => '#k': [NostrConnect.toString()],
event.tags.some(tag => tag[0] === 'k' && tag[1] === NostrConnect.toString()), })
)
// Validate bunkers by checking their NIP-05 and pubkey // validate bunkers by checking their NIP-05 and pubkey
// Map to a more useful object // map to a more useful object
const validatedBunkers = await Promise.all( const validatedBunkers = await Promise.all(
filteredEvents.map(async event => { events.map(async event => {
try { try {
const content = JSON.parse(event.content) const content = JSON.parse(event.content)
const bp = await queryBunkerProfile(content.nip05) const bp = await queryBunkerProfile(content.nip05)
if (bp && bp.pubkey === event.pubkey) { if (bp && bp.pubkey === event.pubkey && bp.relays.length) {
return { return {
bunkerPointer: bp, bunkerPointer: bp,
nip05: content.nip05, nip05: content.nip05,