import client from '@/services/client.service' import indexedDb from '@/services/indexed-db.service' import { ExtendedKind } from '@/constants' /** * Check if user has private relays available (outbox relays or cache relays) * @param pubkey - User's public key * @returns Promise - true if user has at least one private relay available */ export async function hasPrivateRelays(pubkey: string): Promise { // Check for outbox relays (kind 10002) const relayList = await client.fetchRelayList(pubkey) if (relayList.write && relayList.write.length > 0) { return true } // Check for cache relays (kind 10432) const cacheRelayEvent = await indexedDb.getReplaceableEvent(pubkey, ExtendedKind.CACHE_RELAYS) if (cacheRelayEvent) { // Check if cache relay event has any relays const hasRelays = cacheRelayEvent.tags.some(tag => tag[0] === 'relay' && tag[1]) if (hasRelays) { return true } } return false } /** * Get private relay URLs (outbox + cache relays) * @param pubkey - User's public key * @returns Promise - Array of relay URLs */ export async function getPrivateRelayUrls(pubkey: string): Promise { const relayUrls: string[] = [] // Get outbox relays (kind 10002) const relayList = await client.fetchRelayList(pubkey) if (relayList.write) { relayUrls.push(...relayList.write) } // Get cache relays (kind 10432) const cacheRelayEvent = await indexedDb.getReplaceableEvent(pubkey, ExtendedKind.CACHE_RELAYS) if (cacheRelayEvent) { cacheRelayEvent.tags.forEach(tag => { if (tag[0] === 'relay' && tag[1]) { relayUrls.push(tag[1]) } }) } // Deduplicate return Array.from(new Set(relayUrls)) } /** * Get cache relay URLs only * @param pubkey - User's public key * @returns Promise - Array of cache relay URLs */ export async function getCacheRelayUrls(pubkey: string): Promise { const relayUrls: string[] = [] // Get cache relays (kind 10432) const cacheRelayEvent = await indexedDb.getReplaceableEvent(pubkey, ExtendedKind.CACHE_RELAYS) if (cacheRelayEvent) { cacheRelayEvent.tags.forEach(tag => { if (tag[0] === 'relay' && tag[1]) { relayUrls.push(tag[1]) } }) } return Array.from(new Set(relayUrls)) }