From 542c964436cdfc1cf9b1603ccc23df1dd2f7a935 Mon Sep 17 00:00:00 2001 From: codytseng Date: Mon, 31 Mar 2025 22:52:40 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=92=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/providers/NostrProvider/index.tsx | 8 +++----- src/services/client.service.ts | 27 ++++++++++++++------------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/providers/NostrProvider/index.tsx b/src/providers/NostrProvider/index.tsx index 5dc09c32..43af286f 100644 --- a/src/providers/NostrProvider/index.tsx +++ b/src/providers/NostrProvider/index.tsx @@ -430,9 +430,7 @@ export function NostrProvider({ children }: { children: React.ReactNode }) { } }) if (mentions.length > 0) { - const relayLists = await Promise.all( - mentions.map((pubkey) => client.fetchRelayList(pubkey)) - ) + const relayLists = await client.fetchRelayLists(mentions) relayLists.forEach((relayList) => { additionalRelayUrls.push(...relayList.read.slice(0, 4)) }) @@ -445,8 +443,8 @@ export function NostrProvider({ children }: { children: React.ReactNode }) { const event = await signEvent(draftEvent) const relays = specifiedRelayUrls?.length ? specifiedRelayUrls - : (relayList?.write.slice(0, 5) ?? []) - .concat(additionalRelayUrls ?? []) + : (relayList?.write.slice(0, 10) ?? []) + .concat(Array.from(new Set(additionalRelayUrls)) ?? []) .concat(client.getCurrentRelayUrls()) if (!relays.length) { relays.push(...BIG_RELAY_URLS) diff --git a/src/services/client.service.ts b/src/services/client.service.ts index 7785930e..8fb23e20 100644 --- a/src/services/client.service.ts +++ b/src/services/client.service.ts @@ -111,23 +111,23 @@ class ClientService extends EventTarget { const relay = await this.pool.ensureRelay(url) return relay .publish(event) - .then((reason) => { - this.trackEventSeenOn(event.id, relay) - return reason - }) .catch((error) => { if ( error instanceof Error && - error.message.startsWith('auth-required:') && + error.message.startsWith('auth-required') && !!that.signer ) { - relay + return relay .auth((authEvt: EventTemplate) => that.signer!.signEvent(authEvt)) .then(() => relay.publish(event)) } else { throw error } }) + .then((reason) => { + this.trackEventSeenOn(event.id, relay) + return reason + }) }) ) this.dispatchEvent(new CustomEvent('eventPublished', { detail: event })) @@ -207,20 +207,21 @@ class ClientService extends EventTarget { }) const relayCount = Object.keys(group).length - const coveredAuthorSet = new Set() + const coveredCount = new Map() Object.entries(group) .sort(([, a], [, b]) => b.size - a.size) .forEach(([url, pubkeys]) => { if ( relayCount > 10 && pubkeys.size < 10 && - Array.from(pubkeys).every((pubkey) => coveredAuthorSet.has(pubkey)) + Array.from(pubkeys).every((pubkey) => (coveredCount.get(pubkey) ?? 0) >= 2) ) { delete group[url] + } else { + pubkeys.forEach((pubkey) => { + coveredCount.set(pubkey, (coveredCount.get(pubkey) ?? 0) + 1) + }) } - pubkeys.forEach((pubkey) => { - coveredAuthorSet.add(pubkey) - }) }) subRequests.push( @@ -375,7 +376,7 @@ class ClientService extends EventTarget { oneose?.(eosed) }, onclose: (reason: string) => { - if (!reason.startsWith('auth-required:')) { + if (!reason.startsWith('auth-required')) { closedCount++ closeReasons.push(reason) if (closedCount >= startedCount) { @@ -446,7 +447,7 @@ class ClientService extends EventTarget { that.trackEventSeenOn(id, relay) }, onclose(reason) { - if (!reason.startsWith('auth-required:') || hasAuthed) { + if (!reason.startsWith('auth-required') || hasAuthed) { resolve() return }