import { useNostr } from "@nostrify/react"; import { useMutation } from "@tanstack/react-query"; import { useCurrentUser } from "./useCurrentUser"; interface EventTemplate { kind: number; content?: string; tags?: string[][]; created_at?: number; } export function useNostrPublish() { const { nostr } = useNostr(); const { user } = useCurrentUser(); return useMutation({ mutationFn: async (t: EventTemplate) => { if (user) { const tags = t.tags ?? []; // Add the client tag if it doesn't exist if (!tags.some((tag) => tag[0] === "client")) { // FIXME: Replace "mkstack" with the actual client name tags.push(["client", "mkstack"]); } const event = await user.signer.signEvent({ kind: t.kind, content: t.content ?? "", tags, created_at: t.created_at ?? Math.floor(Date.now() / 1000), }); await nostr.event(event, { signal: AbortSignal.timeout(5000) }); } else { throw new Error("User is not logged in"); } }, onError: (error) => { console.error("Failed to publish event:", error); }, onSuccess: (data) => { console.log("Event published successfully:", data); }, }); }