diff --git a/src/components/nostr/kinds/HandlerRecommendationDetailRenderer.tsx b/src/components/nostr/kinds/HandlerRecommendationDetailRenderer.tsx index be48c30..7e957d8 100644 --- a/src/components/nostr/kinds/HandlerRecommendationDetailRenderer.tsx +++ b/src/components/nostr/kinds/HandlerRecommendationDetailRenderer.tsx @@ -61,7 +61,7 @@ function HandlerCard({
- Loading {address.identifier}... + Loading {address?.identifier || "handler"}...
diff --git a/src/components/nostr/kinds/HandlerRecommendationRenderer.tsx b/src/components/nostr/kinds/HandlerRecommendationRenderer.tsx index 3ba18b7..3cfa9a7 100644 --- a/src/components/nostr/kinds/HandlerRecommendationRenderer.tsx +++ b/src/components/nostr/kinds/HandlerRecommendationRenderer.tsx @@ -46,7 +46,9 @@ function HandlerItem({ }) { const { addWindow } = useGrimoire(); const handlerEvent = useNostrEvent(address); - const appName = handlerEvent ? getAppName(handlerEvent) : address.identifier; + const appName = handlerEvent + ? getAppName(handlerEvent) + : (address?.identifier || "Unknown Handler"); const handleClick = () => { addWindow("open", { pointer: address }); diff --git a/src/lib/nip89-helpers.ts b/src/lib/nip89-helpers.ts index 8826a81..eefdb5d 100644 --- a/src/lib/nip89-helpers.ts +++ b/src/lib/nip89-helpers.ts @@ -32,7 +32,9 @@ export function getAppName(event: NostrEvent): string { if (event.content) { try { const metadata = JSON.parse(event.content); - if (metadata.name) return metadata.name; + if (metadata && typeof metadata === "object" && metadata.name && typeof metadata.name === "string") { + return metadata.name; + } } catch { // Not valid JSON, continue to fallback } @@ -40,7 +42,7 @@ export function getAppName(event: NostrEvent): string { // Fallback to d tag identifier const dTag = getTagValue(event, "d"); - return dTag || "Unknown App"; + return dTag && typeof dTag === "string" ? dTag : "Unknown App"; } /** @@ -51,10 +53,13 @@ export function getAppDescription(event: NostrEvent): string | undefined { try { const metadata = JSON.parse(event.content); - return metadata.description; + if (metadata && typeof metadata === "object" && metadata.description && typeof metadata.description === "string") { + return metadata.description; + } } catch { - return undefined; + // Invalid JSON } + return undefined; } /** @@ -65,10 +70,16 @@ export function getAppImage(event: NostrEvent): string | undefined { try { const metadata = JSON.parse(event.content); - return metadata.image || metadata.picture; + if (metadata && typeof metadata === "object") { + const image = metadata.image || metadata.picture; + if (image && typeof image === "string") { + return image; + } + } } catch { - return undefined; + // Invalid JSON } + return undefined; } /**