optimize startup time and announcement fetching

This commit is contained in:
Shroominic
2025-09-11 13:39:29 +01:00
parent 84ff9f5dc3
commit 633ae39622
+32 -24
View File
@@ -292,18 +292,27 @@ async def _determine_provider_id(public_key_hex: str, relay_urls: list[str]) ->
logger.info(f"Using configured provider_id from env: {explicit}")
return explicit
latest_event: dict[str, Any] | None = None
latest_ts = -1
for relay_url in relay_urls:
async def query_single_relay(relay_url: str) -> list[dict[str, Any]]:
try:
events, _ok = await query_nip91_events(relay_url, public_key_hex, None)
for ev in events:
ts = int(ev.get("created_at", 0))
if ts > latest_ts:
latest_event = ev
latest_ts = ts
return events
except Exception:
continue
return []
# Query all relays concurrently
all_events_lists = await asyncio.gather(
*[query_single_relay(relay_url) for relay_url in relay_urls]
)
latest_event: dict[str, Any] | None = None
latest_ts = -1
for events_list in all_events_lists:
for ev in events_list:
ts = int(ev.get("created_at", 0))
if ts > latest_ts:
latest_event = ev
latest_ts = ts
existing_d = _get_single_tag_value(latest_event, "d") if latest_event else None
if existing_d:
@@ -367,20 +376,7 @@ async def announce_provider() -> None:
private_key_hex, public_key_hex = keypair
logger.info(f"Using Nostr pubkey: {public_key_hex}")
# Configure relays first (RELAYS only)
relay_urls = [u.strip() for u in getattr(settings, "relays", []) if u.strip()]
if not relay_urls:
relay_urls = [
"wss://relay.nostr.band",
"wss://relay.damus.io",
"wss://nos.lol",
]
# Determine a stable provider_id
provider_id = await _determine_provider_id(public_key_hex, relay_urls)
logger.info(f"Using provider_id: {provider_id}")
# Core settings only (no ROUTSTR_* vars)
# Resolve settings and determine if we can publish BEFORE touching relays
try:
base_url: str | None = settings.http_url
onion_url: str | None = settings.onion_url
@@ -400,7 +396,6 @@ async def announce_provider() -> None:
logger.info(f"Discovered onion URL via Tor volume: {onion_url}")
mint_urls = cashu_mints if cashu_mints else None
# Build endpoint URLs (skip defaults like localhost)
endpoint_urls: list[str] = []
if base_url and base_url.strip() and base_url.strip() != "http://localhost:8000":
endpoint_urls.append(base_url.strip())
@@ -418,6 +413,19 @@ async def announce_provider() -> None:
)
return
# Only now configure relays and determine provider_id (may query relays)
relay_urls = [u.strip() for u in getattr(settings, "relays", []) if u.strip()]
if not relay_urls:
relay_urls = [
"wss://relay.nostr.band",
"wss://relay.damus.io",
"wss://relay.routstr.com",
"wss://nos.lol",
]
provider_id = await _determine_provider_id(public_key_hex, relay_urls)
logger.info(f"Using provider_id: {provider_id}")
# Build metadata
metadata = {
"name": provider_name,