fix: support zapping addressable events (naddr)

ZapWindow now correctly handles naddr pointers by:
- Using useNostrEvent hook which supports both EventPointer and AddressPointer
- Falling back to addressPointer.pubkey when event hasn't loaded yet

Previously, zapping an naddr would fail because the component only
tried to load events via eventPointer.id, ignoring addressPointer.
This commit is contained in:
Claude
2026-01-21 09:12:12 +00:00
parent 45e68bbdad
commit e7c349ad5a

View File

@@ -31,8 +31,7 @@ import { PrivateKeySigner } from "applesauce-signers";
import { generateSecretKey } from "nostr-tools";
import QRCode from "qrcode";
import { useProfile } from "@/hooks/useProfile";
import { use$ } from "applesauce-react/hooks";
import eventStore from "@/services/event-store";
import { useNostrEvent } from "@/hooks/useNostrEvent";
import { useWallet } from "@/hooks/useWallet";
import { getDisplayName } from "@/lib/nostr-utils";
import { KindRenderer } from "./nostr/kinds";
@@ -101,16 +100,18 @@ export function ZapWindow({
customTags,
relays: propsRelays,
}: ZapWindowProps) {
// Load event if we have an eventPointer and no recipient pubkey (derive from event author)
const event = use$(() => {
if (!eventPointer) return undefined;
return eventStore.event(eventPointer.id);
}, [eventPointer]);
// Load event if we have a pointer - supports both EventPointer and AddressPointer
const event = useNostrEvent(eventPointer || addressPointer);
// Resolve recipient: use provided pubkey or derive from semantic author
// For zaps, this returns the zapper; for streams, returns the host; etc.
// Resolve recipient pubkey:
// 1. Use provided pubkey if available
// 2. Otherwise derive from event's semantic author (zapper, host, etc.)
// 3. Fall back to addressPointer.pubkey for addressable events
const recipientPubkey =
initialRecipientPubkey || (event ? getSemanticAuthor(event) : "");
initialRecipientPubkey ||
(event ? getSemanticAuthor(event) : "") ||
addressPointer?.pubkey ||
"";
const recipientProfile = useProfile(recipientPubkey);