mirror of
https://github.com/dergigi/boris.git
synced 2026-01-18 06:14:27 +01:00
- Remove unused DebugBus import from App.tsx - Remove unused NostrEvent import from relayListService.ts - Add comment to empty catch block in ContentPanel.tsx - Remove unused targetUrlsMap variable from relayManager.ts - All linting errors resolved, TypeScript type checking passes
87 lines
2.6 KiB
TypeScript
87 lines
2.6 KiB
TypeScript
import { RelayPool } from 'applesauce-relay'
|
|
import { prioritizeLocalRelays } from '../utils/helpers'
|
|
|
|
/**
|
|
* Local relays that are always included
|
|
*/
|
|
export const ALWAYS_LOCAL_RELAYS = [
|
|
'ws://localhost:10547',
|
|
'ws://localhost:4869'
|
|
]
|
|
|
|
/**
|
|
* Gets active relay URLs from the relay pool
|
|
*/
|
|
export function getActiveRelayUrls(relayPool: RelayPool): string[] {
|
|
const urls = Array.from(relayPool.relays.keys())
|
|
return prioritizeLocalRelays(urls)
|
|
}
|
|
|
|
/**
|
|
* Normalizes a relay URL to match what applesauce-relay stores internally
|
|
* Adds trailing slash for URLs without a path
|
|
*/
|
|
function normalizeRelayUrl(url: string): string {
|
|
try {
|
|
const parsed = new URL(url)
|
|
// If the pathname is empty or just "/", ensure it ends with "/"
|
|
if (parsed.pathname === '' || parsed.pathname === '/') {
|
|
return url.endsWith('/') ? url : url + '/'
|
|
}
|
|
return url
|
|
} catch {
|
|
// If URL parsing fails, return as-is
|
|
return url
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Applies a new relay set to the pool: adds missing relays, removes extras
|
|
*/
|
|
export function applyRelaySetToPool(
|
|
relayPool: RelayPool,
|
|
finalUrls: string[]
|
|
): void {
|
|
// Normalize all URLs to match pool's internal format
|
|
const currentUrls = new Set(Array.from(relayPool.relays.keys()))
|
|
const normalizedTargetUrls = new Set(finalUrls.map(normalizeRelayUrl))
|
|
|
|
console.log('[relayManager] applyRelaySetToPool called')
|
|
console.log('[relayManager] Current pool has:', currentUrls.size, 'relays')
|
|
console.log('[relayManager] Target has:', finalUrls.length, 'relays')
|
|
|
|
// Add new relays (use original URLs for adding, not normalized)
|
|
const toAdd = finalUrls.filter(url => !currentUrls.has(normalizeRelayUrl(url)))
|
|
console.log('[relayManager] Will add:', toAdd.length, 'relays', toAdd)
|
|
if (toAdd.length > 0) {
|
|
relayPool.group(toAdd)
|
|
}
|
|
|
|
// Remove relays not in target (but always keep local relays)
|
|
const toRemove: string[] = []
|
|
for (const url of currentUrls) {
|
|
// Check if this normalized URL is in the target set
|
|
if (!normalizedTargetUrls.has(url)) {
|
|
// Also check if it's a local relay (check both normalized and original forms)
|
|
const isLocal = ALWAYS_LOCAL_RELAYS.some(localUrl =>
|
|
normalizeRelayUrl(localUrl) === url || localUrl === url
|
|
)
|
|
if (!isLocal) {
|
|
toRemove.push(url)
|
|
}
|
|
}
|
|
}
|
|
console.log('[relayManager] Will remove:', toRemove.length, 'relays', toRemove)
|
|
|
|
for (const url of toRemove) {
|
|
const relay = relayPool.relays.get(url)
|
|
if (relay) {
|
|
relay.close()
|
|
relayPool.relays.delete(url)
|
|
}
|
|
}
|
|
|
|
console.log('[relayManager] After apply, pool has:', relayPool.relays.size, 'relays')
|
|
}
|
|
|