mirror of
https://github.com/Routstr/routstr-core.git
synced 2026-08-09 02:54:37 +00:00
optimize startup time and announcement fetching
This commit is contained in:
+32
-24
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user