2025-04-17 11:23:46 -05:00
|
|
|
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) {
|
2025-05-16 12:28:01 -05:00
|
|
|
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"]);
|
|
|
|
}
|
|
|
|
|
2025-04-17 11:23:46 -05:00
|
|
|
const event = await user.signer.signEvent({
|
|
|
|
kind: t.kind,
|
|
|
|
content: t.content ?? "",
|
2025-05-16 12:28:01 -05:00
|
|
|
tags,
|
2025-04-17 11:23:46 -05:00
|
|
|
created_at: t.created_at ?? Math.floor(Date.now() / 1000),
|
|
|
|
});
|
2025-05-16 12:28:01 -05:00
|
|
|
|
2025-04-23 15:13:17 -05:00
|
|
|
await nostr.event(event, { signal: AbortSignal.timeout(5000) });
|
2025-04-17 11:23:46 -05:00
|
|
|
} 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);
|
|
|
|
},
|
|
|
|
});
|
|
|
|
}
|