mkstack/src/hooks/useNostrPublish.ts
2025-05-16 12:28:01 -05:00

47 lines
1.2 KiB
TypeScript

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);
},
});
}