diff --git a/index.html b/index.html index 95b3ded3..a3003653 100644 --- a/index.html +++ b/index.html @@ -23,6 +23,7 @@ + diff --git a/package.json b/package.json index 8d70fa0c..47352137 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "imwald", - "version": "22.4.2", + "version": "22.5.0", "description": "Imwald — a user-friendly Nostr client focused on relay feed browsing, publications, and relay discovery", "private": true, "type": "module", diff --git a/src/components/ContentPreview/FollowPackPreview.tsx b/src/components/ContentPreview/FollowPackPreview.tsx index 37e93575..0163e981 100644 --- a/src/components/ContentPreview/FollowPackPreview.tsx +++ b/src/components/ContentPreview/FollowPackPreview.tsx @@ -83,7 +83,7 @@ export default function FollowPackPreview({ return } if (!followList) return - const { follow } = followList + const { followMany } = followList const toFollow = packPubkeys.filter((p) => !followingSet.has(p) && !muteSetHas(mutePubkeySet, p)) if (toFollow.length === 0) { const mutedCount = packPubkeys.filter((p) => muteSetHas(mutePubkeySet, p) && !followingSet.has(p)).length @@ -96,9 +96,7 @@ export default function FollowPackPreview({ } setBusy(true) try { - for (const pubkeyToFollow of toFollow) { - await follow(pubkeyToFollow) - } + await followMany(toFollow) toast.success(t('Followed {{count}} users', { count: toFollow.length })) } catch (error) { logger.error('Failed to follow pack', { error }) diff --git a/src/components/RelayIcon/index.tsx b/src/components/RelayIcon/index.tsx index ea54700a..ee683c46 100644 --- a/src/components/RelayIcon/index.tsx +++ b/src/components/RelayIcon/index.tsx @@ -8,8 +8,11 @@ import { useMemo } from 'react' /** * Resolve an image URL from NIP-11. Handles: * - Absolute HTTP(S) URLs → used as-is - * - Relative paths (e.g. "/favicon.ico") → resolved against the relay's base HTTP URL - * - ws(s):// URLs some relays mistakenly return → ignored, fall through to favicon + * - Relative paths (e.g. "/logo.png") → resolved against the relay's base HTTP URL + * - ws(s):// URLs some relays mistakenly return → ignored + * + * We do not fetch `https://host/favicon.ico` as a fallback: many relays return HTML/404 there, + * which triggers Firefox Opaque Response Blocking noise and broken `` loads. */ function resolveRelayImageUrl(raw: string, relayUrl: string): string | undefined { if (!raw) return undefined @@ -47,16 +50,7 @@ export default function RelayIcon({ return nip11Icon } - // Fall back to /favicon.ico at the relay's host - try { - const u = new URL(url) - const scheme = u.protocol === 'wss:' ? 'https:' : 'http:' - const favicon = `${scheme}//${u.host}/favicon.ico` - logger.debug('[RelayIcon] using favicon fallback', { url, rawIcon, favicon }) - return favicon - } catch { - return undefined - } + return undefined }, [url, relayInfo]) return ( diff --git a/src/components/UserAvatar/index.tsx b/src/components/UserAvatar/index.tsx index e1609637..0e95d574 100644 --- a/src/components/UserAvatar/index.tsx +++ b/src/components/UserAvatar/index.tsx @@ -216,7 +216,8 @@ export default function UserAvatar({ const [imgError, setImgError] = useState(false) const [currentSrc, setCurrentSrc] = useState(avatarSrc) - const isVideoAvatar = useMemo(() => isVideo(profile?.avatar?.trim() ?? ''), [profile?.avatar]) + /** Must match `currentSrc`: deferred / fallback identicon is SVG — never pass it to `